手把手教你如何用npm發佈包

熱乎乎的nodejs進階教程第二篇來了,若是第一篇沒看過,建議你們先移步到第一篇npm使用技巧和最佳實踐html

這篇講述如何發佈一個npm模塊,你們平時都是下載各類第三方的npm包到本身的項目,身爲一個有追求的程序員,確定要學學本身造輪子,今天手把手教你們如何發佈一個本身開發的npm包到npm倉庫,讓別人也能下載使用你開發的npm模塊。前端

立刻開始!!!node

npm模塊發佈

當咱們開發node應用的時候,npm倉庫上有不少現有的模塊能夠幫助咱們提升開發效率,像日期處理,字符串處理這些低級的事情咱們就不須要本身作了,由於npm倉庫有不少包能夠處理這些,咱們直接引入使用便可react

那麼問題來了,你有沒有想過npm倉庫上的模塊來自哪裏,又是怎麼發佈上去的?git

這篇文章的目標就是解決上面的這些問題的,let's go!!!程序員

npm上面長千上萬的包來自哪裏

npm上成千上萬的模塊是存儲在一個巨大的倉庫,地址是 https://registry.npmjs.org/,因此咱們要發佈本身開發的模塊的話,也是發佈到這裏,下面來看看怎麼發佈npm

如何把npm包放到npm倉庫

1 建立一個模塊

打開命令行,新建一個目錄mkdir npm-publish-test,執行npm init -y初始化一個默認的包文件package.jsonjson

{
  "name": "npm-publish-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
複製代碼

package.json中最重要的屬性是name和version兩個屬性,這兩個屬性一塊兒造成了一個npm模塊的惟一標識符, 這兩個屬性是必須的,不然模塊就沒法被安裝,。模塊中內容變動的同時,模塊版本也應該一塊兒變化至於怎麼變化,後面會介紹。bash

  • name,你的模塊名, 須要保證惟一,npm倉庫上的模塊名是不能重複的
  • main描述了當你用require('modulename')引用這個模塊的時候,引用的是哪一個文件,這個字段的值你能夠採用默認的或者修改爲你項目中任何一個有效的文件
  • keywords也應該包含在包文件裏面,npm是根據keywords的值去索引模塊的,這樣其餘人才能經過搜索這些關鍵字從而找到你的模塊
  • author就是你了,可是若是你的項目不是你一我的來發的,那麼你也應該將你的開發夥伴一塊兒添加進去

package.json還有不少字段,想全面瞭解移步這篇文章前端框架

2 license

單獨開個小節,來講明license這個字段的意思

license是開源許可說明。在開源世界裏,license是具備法律效力的,經過選擇相應的license,版權擁有者能夠聲稱本身相應的權利,包括其餘人使用、修改、引用、共享等一系列涉及版權的操做。

各大組織設立了爲代碼開源許可的規範文檔,看成者聲明此文檔類型時,他人必須遵照該文檔類型的規範。

國際公認的開源license,有多達80餘種,一張圖帶你瞭解比較經常使用的幾種開源許可協議(原圖來自阮一峯大神,本身稍微修葺了一下)

關於開源許可協議,你們要了解去網上看吧,這裏再也不贅述,咱們放鬆一下,來聽個小故事吧


Facebook + React的變臉

2016年5月,Facebook開源了前端框架React,平地一聲雷,引來前端界震動。

同年7月,Facebook在React開源許可協議中的附加專利條款,條款的精髓歸納一下就是"若是你以爲Facebook侵犯了你的知識產權,你不能起訴Facebook;若是Facebook起訴你,那麼你不能反訴,不然你就當即中止使用React",反正怎樣捱打的都是你,而後你們都被Facebook的流氓行徑搞炸了,說好的開源共享精神呢???

隨後,Apache、WordPress等組織陸續宣佈封殺或棄用React,同時,中國互聯網的一批企業開始意識到問題嚴重性,尋求新的前端技術來替代React

若是當時大家公司採用的技術棧是React, 可是大家不爲所動,仍是繼續無所忌憚使用的話,原諒我這個老實人要說大實話了,那大家公司在互聯網行業的水平和地位,嗯嗯嗯。。。。。你們都懂的。

10月,Facebook迫於開發者和開源社區的壓力,宣佈將react及其餘一系列採用BSD+專利許可協議的軟件改用MIT許可。

瞧瞧!小扎多精明,除了會敲代碼,變臉技術也不賴! 雖然一波三折,最後仍是開源共享了,再加上這張帥臉把持,咱們仍是選擇原諒他吧。


故事講完了,想知道怎麼選擇軟件許可協議的小夥伴,請移步這個網站

3 語義化版本

version很是重要!!!在此再重申一遍!!!

教程的第一篇已經詳細解釋了npm模塊版本的問題,這裏再重申一遍npm的語義化版本定義:major.minor.patch(大版本.小版本.補丁版)

  • 大版本,作了不兼容的API修改
  • 小版本,添加了向後兼容的功能
  • 補丁版,作了向後兼容的bug修復

版本不是爲機器定義的,是爲用戶定義的,因此你項目作了改變的時候,記得同步更改對應版本,版本號的定義請嚴格按照語義化版原本。

4 加入說明文檔

若是你要向別人分享你的代碼,那麼有一個合適的說明文檔就很是有必要了,一般在你項目的根目錄放一個README.md就夠了

這個是規範性要求,不是強制性要求,你要是任性不放,我也不會打你

你要是以爲你們時間多到用不完還有心情去看你的代碼,而後搞明白你的代碼是幹什麼的以及如何使用,你能夠試試不加。

5 私有文件不要上傳

.npmignore文件來記錄不發佈的私有文件,在這個文件裏面添加你不想上傳的私有文件

這個文件和在在git項目中使用.gitignore的效果是同樣的,npm和git同樣,會查找你包裏面全部目錄中的.npmignore和.gitignore文件

6 註冊npm帳戶

你左思右想,奮筆疾書,洋洋灑灑寫了一篇自覺得很棒的文章,準備發佈到網上,吸引無數粉絲,閱讀破萬,一躍成爲網紅寫手,想一想都好激動!!!對此,我只能

冷靜一下

在發佈以前,還有一件很重要的事情要作,去npm官網註冊用戶,不然你沒有權限在npm倉庫發包

註冊的方式有兩種

  1. npm官網註冊,和你平時註冊一個網站帳戶大同小異
  2. 用命令行註冊

身爲一個程序員,必定要有逼格,因此個人選擇確定不是第一種

命令行註冊步驟:在命令行執行npm adduser, 按照提示依次輸入用戶名,密碼和郵箱,我就隨便註冊了一個用戶給你們演示一下

上面顯示已經註冊成功了,可是去npm的官網用這個帳號登錄不進去,報錯以下

細心的小夥伴應該已經找到緣由了

還沒找到緣由的小夥伴,請仔細看看上面我註冊的地址

my god! 這哪是註冊到npm上去了,這是註冊到npm的淘寶鏡像了,因爲以前我爲了npm包下載的更快,配置了這條命令 npm config set registry https://registry.npm.taobao.org 暈,不當心中招了

如今切換到官方倉庫地址,執行 npm config set registry https://registry.npmjs.org/ 執行npm adduser從新註冊一個

而後咱們用新註冊的帳號再去登錄, Bingo!

特別說明:平時開發,你們能夠把npm的registry設置成淘寶鏡像源來加快開發效率,可是你們若是要發佈包,建議一開始就把npm的registry配置成官方鏡像地址,否則後面發佈還會出問題!!!

7 npm包發佈

開發包我就不說了,你不會我也沒辦法,呵呵,本地測試本身開發包第一篇教程已經講了,如今咱們直奔主題,如何發佈這個已經開發好的包。 在項目根目錄下執行

npm whoami //驗證你的憑據已存儲在客戶端,註冊成功了就會顯示你的用戶名
npm publish --access=public //若是是公開包這樣發佈,若是不是公開的包則去掉--access=public便可
複製代碼

8 更新一個已經發布的包

當你更改了代碼,準備從新發布包的時候

先執行npm version major/minor/patch更新對應版本,

而後再執行 npm publish進行發佈

9 刪除包

  • 一、刪除指定的版本
npm unpublish 包名@版本號
複製代碼
  • 二、刪除整個包

npm unpublish 包名 --force

後記

最近公司的任務很少,因此就多了不少時間來寫文章,感受本身快成二師兄了

誰知道啥時候忙起來,就很難保持高更的頻率了

雖然任性了一點,可是我作人仍是有底線的,一個月2篇+文章仍是有保證的,畢竟要同時兼顧質量和數量。

最後,公總號同步更新,歡迎掃碼關注,第一時間獲取更新動態。

相關文章
相關標籤/搜索