在我們寫完一個應用程序后,需要發布到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