在開始之前,先去註冊一個NPM賬號,如果沒有的話
◈ 釋出NPM公開包
♢ 建立專案
-
建專案資料夾
先建一個工程資料夾或者拉取遠端git上的已有專案mkdir my-test-project 複製程式碼
-
初始化git
進入該資料夾,先初始化git(如果還沒有的話),用於版本控制。在github(也可以其他)上新建一個與專案同名的遠端倉庫,並新增README.md
檔案,拷貝倉庫地址,如:// 拷貝github上的倉庫地址 git@github.com:username/my-test-project.git git init git remote add origin git@github.com:usename//my-test-project.git git push -u origin master 複製程式碼
這樣就把本地倉庫和遠端倉庫關聯起來了
-
初始化npm
在專案根目錄下即my-test-project
目錄下執行,npm init
,然後根據提示填寫相關資訊,有些可以略過後續修改。
要注意的是name欄位,有幾個點要提醒:- 這個是唯一的,不能和npm上所有已有的包重名,否則在publish的時候回會提示許可權錯誤
npm ERR! You do not have permission to publish "my-test-project". Are you logged in as the correct user? : my-test-project 複製程式碼
- 另外命名也有規範,不能出現下劃線、大寫字母、空格等字元,可以有連字元(中劃線)
- 先建立
index.js
檔案,作為測試,在裡面寫幾行簡單程式碼,並export一個預設變數
- 這個是唯一的,不能和npm上所有已有的包重名,否則在publish的時候回會提示許可權錯誤
♢ 釋出
-
先登入npm使用者,執行
npm adduser // or npm login Username: npm-user-name Password: Email: your-email 複製程式碼
根據提示輸入正確的npm使用者名稱、密碼、郵箱,新增完後會預設登入
-
執行
npm publish 複製程式碼
如果沒什麼問題,應該就釋出成功了。可以去npm搜尋釋出的包:
my-test-project
,或者去自己的npm賬號下檢視package
♢ 關於測試
-
publish前測試
在npm init 完成之後,就可以作為一個依賴包供其他模組引用。根據上面的例子,把my-test-project資料夾放入另外的測試工程node_modules資料夾下面,這樣就可以跟引入其他模組一樣,引入之前在index.js裡面export的測試變數,如// my-test-project 下的index.js const a = `this is a test` export default a // or module.exports = a // 引用 import a from `my-test-project` // or const a = require(`my-test-project`) 複製程式碼
建議先測試完,沒有問題再publish
-
publish後測試是否有問題
publish後就更好辦了,直接像安裝其他模組一樣通過npm i 命令安裝,然後引用
◈ 更新已釋出的包
更新包和釋出包的命令是一樣的,更新包只需修改package.json裡面的version
欄位,也可以使用npm 自帶的版本控制命令修改版本號,更新的步驟為:
- 修改版本號
- npm publish
♢ npm version
npm 提供官方提供了npm version
來進行版本控制,其效果跟手動修改package.json裡面的version欄位是一樣的,好處在於,可以在構建過程中用npm version
命令自動修改,而且具有語義化即Semantic versioning
.
npm version [<newversion> | major | minor | patch | premajor | preminor |
prepatch | prerelease | from-git]
複製程式碼
其語義為:
major:主版本號(大版本)
minor:次版本號(小更新)
patch:補丁號(補丁)
premajor:預備主版本
preminor: 預備次版本
prepatch:預備補丁版本
prerelease:預釋出版本
複製程式碼
如初始版本為 1.0.0,執行相關型別命令後,對應的語意為:
npm version patch // 1.0.1 表示小的bug修復
npm version minor // 1.1.0 表示新增一些小功能
npm version mmajor // 2.0.0 表示大的版本或大升級
npm version preminor // 1.1.0-0 後面多了個0,表示預釋出
複製程式碼
可以在當前模組的package.json裡面看到相應的版本變化
◈ 撤銷釋出
由於撤銷釋出會讓把要撤銷的包作為依賴的包不能正常工作,所以npm官方對包的撤銷是有限制的:
- 不允許撤銷釋出已經超過24小時的包(
unpublish is only allowed with versions published in the last 24 hours
) - 如果在24小時內確實要撤銷,需要加–force引數
- 即使撤銷了釋出的包,再次釋出的時候也不能與之前被撤銷的包的名稱/版本其中之一相同,因為這兩者構成的唯一性已經被佔用,官方並沒有隨著撤銷而刪除
♢ npm unpublish
撤銷釋出的命令為 npm unpublish
npm unpublish my-test-project
// 報錯
npm ERR! Refusing to delete entire project.
npm ERR! Run with --force to do this.
npm ERR! npm unpublish [<@scope>/]<pkg>[@<version>]
// 加 --force引數重新撤銷釋出
npm unpublish my-test-project --force
npm WARN using --force I sure hope you know what you are doing.
- my-test-project
複製程式碼
♢ npm deprecate
npm unpublish
的推薦替代命令:
npm deprecate <pkg>[@<version>] <message>
複製程式碼
這個命令,並不會在npm上裡撤銷已有的包,但會在任何人嘗試安裝這個包的時候得到deprecated的警告,例如:
npm deprecate my-test-project `this package is no longer maintained`
複製程式碼
參考: