NPM包(模組)釋出、更新、撤銷釋出
- 建專案資料夾 先建一個工程資料夾或者拉取遠端git上的已有專案
mkdir my-test-project 複製程式碼
- 初始化git 進入該資料夾,先初始化git(如果還沒有的話),用於版本控制。在github(也可以其他)上新建一個與專案同名的遠端倉庫,並新增README.md檔案,拷貝倉庫地址,如:
git@github.com:username/test-pro.gitgit init git remote add origin git@github.com:usename/test-pro.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使用者,執行
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' 複製程式碼
參考: