npm包管理及發佈教程彙總

說明:

原諒參考自sf社區文章,這裏只是做總結提煉,原諒鏈接:npm發佈包教程

關於npm的基本認知

是什麼?(node package manager)

基本認識

  • 是一個輔助前端開發的包管理工具
  • 管理對象:包(package)
  • 管理方式:
    • 增(發佈npm publish, 安裝:npm install)
    • 刪(廢棄:npm deprecate|npm unpublish xx --force;卸載:npm uninstall
    • 改(更新:npm update
    • 查(搜索:npm info xxx
  • npm中涉及到的主體主要有兩種:package(含有pakcage.json描述文件併發布到npm倉庫的文件或文件夾)和module(在node_modules中,可以被Node.js的require方法加載的任何文件或文件夾)
    • 兩者關係:`一個JavaScript程序,從本地發佈到npm倉庫時是package,從npm倉庫下載到本地時就變成了module

package(包)

  • 主要兩個重要屬性:
  1. Scope(作用域,範圍)

一旦註冊個人或者團體賬戶,就獲得了與個人或者團體名相匹配的scope,可以用這個scope作爲包的命名空間,例如@yuyy、@58。

分類:

  • unscoped: 如babel
  • scoped:
    • user:如@test/babel
    • org: @babel/parser
  • 作用:爲你自己發佈的包提供命名空間,防止與他人的包名衝突
  1. Accessibility(可訪問性)
    屬性值有:
  • private: 私有,僅作者本人或者團隊成員可見
  • public: 公有,所有人可見
  • 關係說明:

module(模塊)

下載到本地的module主要是用於在node環境中被引用,爲了能被 require方法加載,module必須是下列情況之一:

  • 包含package.json,且package.json中有main字段的文件夾
  • 含有index.js的文件夾
  • JS文件

發佈包

  • 前提條件:註冊一個npm賬戶

npm官方建議規範的包至少包含:
- package.json(包的基本信息)
- README.md(文檔)
- index.js(入口文件)

發佈一個unscoped包

  1. 創建必要的文件
# 創建項目
mkdir test && cd test
# 創建package.json
npm init
# 創建README.md(隨便的測試內容)
# 創建index.js
module.exports = {
    printMsg: function () {
        console.log('this message is from yuyy-test-pkg!');
    }
}

  1. 發佈
  • npm publish
  1. 可能報的錯
    • 未登錄: need auth auth required for publishing, 解決辦法:npm adduser
    • 倉庫地址錯誤:npm ERR! code E409 registry returned 409 for put,原因:可能本地使用的倉庫是cnpm不是npm, 解決辦法:用nrm切換到npm倉庫,執行命令nrm use npm
  2. 在npm官網搜索查看(個人賬號下的packages中可查)

發佈一個scoped包

  • 如@sophieu/test
  1. 創建項目及文件
mkdir test && cd test
# 創建package.json
npm init 
# 創建README.md
# 創建index.js

  1. 加作用域
npm init --scope=@sophiewu -y

@符號後面的是你註冊npm賬戶時的username,如果不記得可以通過npm whoami查詢。上面的命令其實是在重新生成package.json,只是會給包增加了作用域

  1. 公共發佈

由於使用npm publish發佈scoped包默認是私有發佈的需要收費,這裏使用公共發佈

npm publish --access public
  • 以上發佈我,項目名是test,最終發佈的包名是@sophiewu/test,可見發佈的包名可以和項目名不一致,包名取決於package.json中的name字段

過濾部分文件

npm publish 的時候會把項目目錄裏面所有的文件都publish到npm倉庫中, 但是往往有一部分目錄和文件不想發佈上去,比如項目的源碼、編譯腳本等等信息。
只發布用戶需要使用的相關文件:

  • 方法一: 使用.gitignore設置忽略哪些文件
  • 方法二: 使用.npmignore設置忽略哪些文件
  • 方法三:使用package.json 的 files字段選擇發佈哪些文件

npm包的迭代

npm包的每次迭代都要涉及到兩個方面:

  • 內容的變更
  • 版本的變更

npm的版本管理

npm採用語義化版本,共三位,以’.’隔開,從左至右依次代表:主版本(major)、次要版本(minor)、補丁版本(patch)。
版本規範

  • 變更版本號的命令: npm version <major|minor|patch>
npm version minor
# 執行結果: v1.1.0, package.json中的version從原來的v1.0.0--->v1.1.0
  • 查看版本 npm view xxx versions
  • 安裝更新npm up xxx

廢棄/刪除

npm包發佈後可以對包進行廢棄或刪除操作,廢棄和刪除的區別在於:

  • 廢棄不會將包或版本從npm倉庫刪除,仍然可以繼續下載安裝,並在安裝的時候會有警示
  • 刪除會將包從npm徹底刪除,無法被下載安裝

無論是廢棄還是刪除,都包含兩個層面:

  • 版本的廢棄/刪除
  • 包的廢棄/刪除

廢棄

# 廢棄指定版本
npm deprecate [email protected] 'test deprecate'
# 安裝廢棄版本
npm i [email protected]

刪除

npm不鼓勵任何形式的刪除,主要因爲我們發佈的包可能已經被其他人引用,如果我們刪除了此包,其他人在重新安裝含有我們包的依賴的工程時,出現找不到包問題。
基於此,npm做了相關的刪除限制:

  • 刪除的版本24小時後方可重發!
  • 只有發佈72小時之內的包可以刪除!
# 刪除
npm unpublish yuyy-test-pkg --force
npm unpublish @yuyy/babel --force

nrm源管理工具

nrm(npm registry manager )是npm的鏡像源管理工具,有時候國外資源太慢,使用這個就可以快速地在 npm 源間切換

  • 安裝npm install -g nrm
  • 使用:
# 查看所有源(帶*的是當前使用的源)
nrm ls 
# 切換源
nrm use taobao
# 增加源
nrm add registry http://registry.npm.frp.trmap.cn/
# 刪除源
nrm del <registry>
# 測試源速度
nrm test npm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章