NPM包(模塊)發(fā)布、更新、撤銷發(fā)

在開始之前,先去注冊一個NPM賬號,如果沒有的話

? 發(fā)布NPM公開包

? 創(chuàng)建項目

  1. 建項目文件夾
    先建一個工程文件夾或者拉取遠(yuǎn)程git上的已有項目

    mkdir my-test-project
    復(fù)制代碼
    
  2. 初始化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)起來了

  3. 初始化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ā)布

  1. 先登錄npm用戶,執(zhí)行

    npm adduser // or npm login
    Username: npm-user-name
    Password:
    Email: your-email
    復(fù)制代碼
    

    根據(jù)提示輸入正確的npm用戶名、密碼、郵箱,添加完后會默認(rèn)登錄

  2. 執(zhí)行

    npm publish
    復(fù)制代碼
    

    如果沒什么問題,應(yīng)該就發(fā)布成功了。可以去npm搜索發(fā)布的包: my-test-project,或者去自己的npm賬號下查看package

? 關(guān)于測試

  1. 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

  2. publish后測試是否有問題
    publish后就更好辦了,直接像安裝其他模塊一樣通過npm i 命令安裝,然后引用

? 更新已發(fā)布的包

更新包和發(fā)布包的命令是一樣的,更新包只需修改package.json里面的version字段,也可以使用npm 自帶的版本控制命令修改版本號,更新的步驟為:

  1. 修改版本號
  2. 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官方對包的撤銷是有限制的:

  1. 不允許撤銷發(fā)布已經(jīng)超過24小時的包(unpublish is only allowed with versions published in the last 24 hours
  2. 如果在24小時內(nèi)確實要撤銷,需要加--force參數(shù)
  3. 即使撤銷了發(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ù)制代碼

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,296評論 2 376