npm publish那些事


在我們寫完一個應用程序后,需要發布到npm上,大多數人可能僅僅使用 npm publish 就完成了,我這里講一下如何更好的發布包。

registry

在下載包的時候,很多人喜歡設置 taobao 鏡像,因為 npm 倉庫 服務器 在國外,下載速度真是急死個人,淘寶鏡像每10分鍾同步一次 Npm 上的包。發布的時候也一樣,一般開源應用基本都發布到 npmjs ,公司內部包的話就會發到私有 Npm 倉庫,我們可以在 package.json 設置一下你想要的發布的地址:

"publishConfig": {
    "registry": "http://registry.npm.xxx.com/"
 }

也可以設置別名

alias ynpm="npm --registry=http://registry.npm.xxx.com"
// 發布的時候
ynpm publish

權限相關

發布包需要驗證你的賬號權限,第一次執行 npm adduser ,后面就只需要 npm login 了。有時候我們遇到說你用戶名密碼錯誤,但實際並沒錯,可能是因為你的 registry 設置成了淘寶鏡像的url,npm配置可以前往 ~/.npmrc 查看,可以通過 npm config delete registry 刪除掉。如果你需要一個人幫你一起發包,可以使用 npm owner add <user> [<@scope>/]<pkg> 去添加一個用戶,不過最好還是把發布權限收緊,其他人提MR,包的 owner 進行 code review ,然后發包。

發布哪些文件

發布一個包,考慮到別人的下載速度,包體積肯定需要盡量小,所以源文件最好不包括,那如何控制只發哪些文件呢?

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

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

有些文件不能無法通過配置排除或者包含:

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

以上文件無法忽略。

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

以上文件無法發布到 npm 。

版本管理

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

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 這個包就可以。

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

這樣就萬事大吉了。


原文鏈接:https://www.codercto.com/a/87547.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM