在開始之前,先去注冊一個NPM賬號,如果沒有的話
? 發(fā)布NPM公開包
? 創(chuàng)建項目
-
建項目文件夾
先建一個工程文件夾或者拉取遠(yuǎn)程git上的已有項目mkdir my-test-project 復(fù)制代碼
-
初始化git
進(jìn)入該文件夾,先初始化git(如果還沒有的話),用于版本控制。在github(也可以其他)上新建一個與項目同名的遠(yuǎn)程倉庫,并添加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 復(fù)制代碼
這樣就把本地倉庫和遠(yuǎn)程倉庫關(guān)聯(lián)起來了
-
初始化npm
在項目根目錄下即my-test-project
目錄下執(zhí)行,npm init
,然后根據(jù)提示填寫相關(guān)信息,有些可以略過后續(xù)修改。 要注意的是name字段,有幾個點要提醒:-
這個是唯一的,不能和npm上所有已有的包重名,否則在publish的時候回會提示權(quán)限錯誤
npm ERR! You do not have permission to publish "my-test-project". Are you logged in as the correct user? : my-test-project 復(fù)制代碼
另外命名也有規(guī)范,不能出現(xiàn)下劃線、大寫字母、空格等字符,可以有連字符(中劃線)
先創(chuàng)建
index.js
文件,作為測試,在里面寫幾行簡單代碼,并export一個默認(rèn)變量
-
? 發(fā)布
-
先登錄npm用戶,執(zhí)行
npm adduser // or npm login Username: npm-user-name Password: Email: your-email 復(fù)制代碼
根據(jù)提示輸入正確的npm用戶名、密碼、郵箱,添加完后會默認(rèn)登錄
-
執(zhí)行
npm publish 復(fù)制代碼
如果沒什么問題,應(yīng)該就發(fā)布成功了。可以去npm搜索發(fā)布的包:
my-test-project
,或者去自己的npm賬號下查看package
? 關(guān)于測試
-
publish前測試
在npm init 完成之后,就可以作為一個依賴包供其他模塊引用。根據(jù)上面的例子,把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') 復(fù)制代碼
建議先測試完,沒有問題再publish
publish后測試是否有問題
publish后就更好辦了,直接像安裝其他模塊一樣通過npm i 命令安裝,然后引用
? 更新已發(fā)布的包
更新包和發(fā)布包的命令是一樣的,更新包只需修改package.json里面的version
字段,也可以使用npm 自帶的版本控制命令修改版本號,更新的步驟為:
- 修改版本號
- npm publish
? npm version
npm 提供官方提供了npm version
來進(jìn)行版本控制,其效果跟手動修改package.json里面的version字段是一樣的,好處在于,可以在構(gòu)建過程中用npm version
命令自動修改,而且具有語義化即Semantic versioning
.
npm version [<newversion> | major | minor | patch | premajor | preminor |
prepatch | prerelease | from-git]
復(fù)制代碼
其語義為:
major:主版本號(大版本)
minor:次版本號(小更新)
patch:補(bǔ)丁號(補(bǔ)丁)
premajor:預(yù)備主版本
preminor: 預(yù)備次版本
prepatch:預(yù)備補(bǔ)丁版本
prerelease:預(yù)發(fā)布版本
復(fù)制代碼
如初始版本為 1.0.0,執(zhí)行相關(guān)類型命令后,對應(yīng)的語意為:
npm version patch // 1.0.1 表示小的bug修復(fù)
npm version minor // 1.1.0 表示新增一些小功能
npm version mmajor // 2.0.0 表示大的版本或大升級
npm version preminor // 1.1.0-0 后面多了個0,表示預(yù)發(fā)布
復(fù)制代碼
可以在當(dāng)前模塊的package.json里面看到相應(yīng)的版本變化
? 撤銷發(fā)布
由于撤銷發(fā)布會讓把要撤銷的包作為依賴的包不能正常工作,所以npm官方對包的撤銷是有限制的:
- 不允許撤銷發(fā)布已經(jīng)超過24小時的包(
unpublish is only allowed with versions published in the last 24 hours
) - 如果在24小時內(nèi)確實要撤銷,需要加--force參數(shù)
- 即使撤銷了發(fā)布的包,再次發(fā)布的時候也不能與之前被撤銷的包的名稱/版本其中之一相同,因為這兩者構(gòu)成的唯一性已經(jīng)被占用,官方并沒有隨著撤銷而刪除
? npm unpublish
撤銷發(fā)布的命令為 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參數(shù)重新撤銷發(fā)布
npm unpublish my-test-project --force
npm WARN using --force I sure hope you know what you are doing.
- my-test-project
復(fù)制代碼
? npm deprecate
npm unpublish
的推薦替代命令:
npm deprecate <pkg>[@<version>] <message>
復(fù)制代碼
這個命令,并不會在npm上里撤銷已有的包,但會在任何人嘗試安裝這個包的時候得到deprecated的警告,例如:
npm deprecate my-test-project 'this package is no longer maintained'
復(fù)制代碼
參考: