文章目錄
說明:
原諒參考自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(包)
- 主要兩個重要屬性:
- Scope(作用域,範圍)
一旦註冊個人或者團體賬戶,就獲得了與個人或者團體名相匹配的scope,可以用這個scope作爲包的命名空間,例如@yuyy、@58。
分類:
- unscoped: 如babel
- scoped:
- user:如@test/babel
- org: @babel/parser
- 作用:爲你自己發佈的包提供命名空間,防止與他人的包名衝突
- 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包
- 創建必要的文件
# 創建項目
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!');
}
}
- 發佈
npm publish
- 可能報的錯
- 未登錄:
need auth auth required for publishing
, 解決辦法:npm adduser
- 倉庫地址錯誤:
npm ERR! code E409 registry returned 409 for put
,原因:可能本地使用的倉庫是cnpm不是npm, 解決辦法:用nrm切換到npm倉庫,執行命令nrm use npm
- 未登錄:
- 在npm官網搜索查看(個人賬號下的packages中可查)
發佈一個scoped包
- 如@sophieu/test
- 創建項目及文件
mkdir test && cd test
# 創建package.json
npm init
# 創建README.md
# 創建index.js
- 加作用域
npm init --scope=@sophiewu -y
@符號後面的是你註冊npm賬戶時的username,如果不記得可以通過
npm whoami
查詢。上面的命令其實是在重新生成package.json,只是會給包增加了作用域
- 公共發佈
由於使用
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