npm 發包者必讀

在咱們寫完一個應用程序後,須要發佈到npm上,大多數人可能僅僅使用npm publish就完成了,在這裏我講一下如何更好的發佈包。html

1. registry

在下載包的時候,不少人喜歡設置taobao鏡像,由於npm倉庫服務器在國外,下載速度真是急死我的。發佈的時候也同樣,通常開源應用基本都發布到npmjs,公司內部包的話就會發到私有Npm倉庫,咱們能夠在package.json設置一下你想要的發佈的地址:git

"publishConfig": {
    "registry": "http://registry.npm.xxx.com/"
 }
複製代碼

也能夠設置別名github

alias ynpm="npm --registry=http://registry.npm.xxx.com"
// 發佈的時候
ynpm publish
複製代碼

2. 權限相關

發佈包須要驗證你的帳號權限,第一次執行npm adduser,後面就只須要npm login了。有時候咱們遇到說你用戶名密碼錯誤,但實際並沒錯,多是由於你的registry設置成了淘寶鏡像的url,npm配置能夠前往~/.npmrc查看,能夠經過npm config delete registry刪除掉。若是你須要一我的幫你一塊兒發包,可使用npm owner add <user> [<@scope>/]<pkg>去添加一個用戶,不過最好仍是把發佈權限收緊,其餘人提MR,包的owner進行code review,而後發包。npm

3. 發佈哪些文件?

發佈一個包,考慮到別人的下載速度,包體積確定須要儘可能小,因此源文件最好不包括,那如何控制只發哪些文件呢?json

第一種方式是在 package.jsonfiles 字段來控制,files 字段的值是一個數組,你能夠寫具體文件名,也能夠寫目錄,還支持 glob 模式。數組

第二種就是使用 .npmignore 配置文件,他相似於 .gitignore 文件,其實若是沒有 .npmignore,會使用.gitignore來取代他的功能。在包的根目錄下,.npmignore不會覆蓋 files 字段,但在子目錄中會覆蓋。服務器

有些文件不能沒法經過配置排除或者包含:svn

  • package.json
  • README
  • CHANGES / CHANGELOG / HISTORY
  • LICENSE / LICENCE
  • NOTICE
  • main字段中的文件

以上文件沒法忽略。工具

  • .git
  • CVS
  • .svn
  • .DS_Store
  • ._*
  • 等等

以上文件沒法發佈到 npm測試

4. 版本管理

npm的發包須要遵循語義化版本,一個版本號包含三個部分:MAJOR.MINOR.PATCH

  • MAJOR 表示主版本號,當你作了不兼容的API修改;
  • MINOR 表示次版本號,當你作了向下兼容的功能性新增;
  • PATCH 表示修訂號,當你作了向下兼容的問題修正;

咱們可使用npm version 命令來自動修改版本號,好比:

// version = v1.0.0
npm version patch
// v1.0.1
npm version prepatch
// v1.0.2-0
npm version minor
// v1.1.0
npm version major
// v2.0.0
複製代碼

通常來講還有先行版本,測試版本等,他們這樣命名

  • 3.1.0-beta.0
  • 3.1.0-alpha.0

若是咱們發佈先行版本,npm version prepatch 命令得出的版本號好像就不夠規範了,咱們只能使用 npm version 1.0.0-alpha.1 指定版本號,不過還好,在 npm 6.4.0 以後,咱們可使用 --preid 參數:

npm version prerelease --preid=alpha
複製代碼

5. Changelog

包發佈了不少次後,使用者升級就須要知道他是否須要升級,須要查看文檔看看有哪些不兼容性改動,因此須要一個 Changelog 來記錄每次發佈改了些什麼。若是手動的維護確定會有忘記的時候,因此須要使用工具來自動生成,咱們可使用standard-version 這個包來生成,這個包的做用是自動更新版本和生成CHANGELOG

standard-version --prerelease alpha
✔ bumping version in package.json from 3.0.2-0 to 3.0.2-alpha.0
✔ created CHANGELOG.md
✔ outputting changes to CHANGELOG.md
✔ committing package.json and CHANGELOG.md
✔ tagging release v3.0.2-alpha.0
ℹ Run `git push --follow-tags origin master && npm publish --tag alpha` to publish
// 再看下生成的Changelog

### Bug Fixes

* 添加功能1 75e2808

### [3.0.2-alpha.0](///compare/v3.0.2-0...v3.0.2-alpha.0) (2019-06-18)
複製代碼

有了這個工具咱們都不須要使用npm version prepatch了。standard-version會根據你的git commit信息,自動生成日誌,好比新增啥啥功能,修復啥啥啥bug。自動生成的同時,也就意味着你git commit須要遵循必定格式,好比:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-co lons, etc)
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance

咱們可使用 commitlint搭配 husky 來校驗你commit的信息是否符合標準

{
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }
}
複製代碼

也可使用交互式的方式來生成commit,commitizen這個包就能夠。

6. Tag

在說明npm的tag以前須要先將一講git的tag:

git的tag

git上打標籤咱們應該比較熟悉,特別是開發sdk或者APP軟件的同窗。咱們在使用npm version prepatch的時候就會默認執行一次git tag version,咱們也能夠手動打一個標籤git tag -a <tag名> -m <註釋文字>,經過git push — tags origin master 將標籤推到遠程。

npm的tag

咱們能夠經過 npm dist-tag ls [<pkg>] 來查看一個包的tag,通常來講咱們至少會有三種類型的標籤

  • latest:最後版本,npm install的就是這個
  • beta:測試版本,通常內測使用,須要指定版本號install,例如3.1.0-beta.0
  • next: 先行版本,npm install foo@next安裝,例如3.0.2-alpha.0

若是咱們須要發佈一個測試版本,在發佈的時候須要執行

npm publish --tag beta
複製代碼

若是你直接執行npm publish,那麼即便你的版本號是-beta.n,默認會打上latest的標籤,別人install的時候也會下載到。這個時候須要咱們只要改一下tag:

// 不當心發錯了
latest: 1.0.1-beta.0
// 將1.0.1-beta.0設置爲beta
npm dist-tag add my-package@1.0.1-beta.0 beta
npm dist-tag add my-package@1.0.0 latest
複製代碼

這樣就萬事大吉了。

本文首發於個人我的博客:wulv.site/2019-06-17/…

相關文章
相關標籤/搜索