在咱們寫完一個應用程序後,須要發佈到npm上,大多數人可能僅僅使用npm publish
就完成了,在這裏我講一下如何更好的發佈包。html
在下載包的時候,不少人喜歡設置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
複製代碼
發佈包須要驗證你的帳號權限,第一次執行npm adduser
,後面就只須要npm login
了。有時候咱們遇到說你用戶名密碼錯誤,但實際並沒錯,多是由於你的registry
設置成了淘寶鏡像的url,npm配置能夠前往~/.npmrc
查看,能夠經過npm config delete registry
刪除掉。若是你須要一我的幫你一塊兒發包,可使用npm owner add <user> [<@scope>/]<pkg>
去添加一個用戶,不過最好仍是把發佈權限收緊,其餘人提MR,包的owner
進行code review
,而後發包。npm
發佈一個包,考慮到別人的下載速度,包體積確定須要儘可能小,因此源文件最好不包括,那如何控制只發哪些文件呢?json
第一種方式是在 package.json
裏 files
字段來控制,files
字段的值是一個數組,你能夠寫具體文件名,也能夠寫目錄,還支持 glob
模式。數組
第二種就是使用 .npmignore
配置文件,他相似於 .gitignore
文件,其實若是沒有 .npmignore
,會使用.gitignore
來取代他的功能。在包的根目錄下,.npmignore
不會覆蓋 files
字段,但在子目錄中會覆蓋。服務器
有些文件不能沒法經過配置排除或者包含:svn
以上文件沒法忽略。工具
以上文件沒法發佈到 npm
。測試
npm的發包須要遵循語義化版本,一個版本號包含三個部分:MAJOR.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
複製代碼
通常來講還有先行版本,測試版本等,他們這樣命名
若是咱們發佈先行版本,npm version prepatch
命令得出的版本號好像就不夠規範了,咱們只能使用 npm version 1.0.0-alpha.1
指定版本號,不過還好,在 npm 6.4.0
以後,咱們可使用 --preid
參數:
npm version prerelease --preid=alpha
複製代碼
包發佈了不少次後,使用者升級就須要知道他是否須要升級,須要查看文檔看看有哪些不兼容性改動,因此須要一個 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
須要遵循必定格式,好比:
咱們可使用 commitlint搭配 husky
來校驗你commit的信息是否符合標準
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
複製代碼
也可使用交互式的方式來生成commit,commitizen這個包就能夠。
在說明npm的tag以前須要先將一講git的tag:
git上打標籤咱們應該比較熟悉,特別是開發sdk或者APP軟件的同窗。咱們在使用npm version prepatch
的時候就會默認執行一次git tag version
,咱們也能夠手動打一個標籤git tag -a <tag名> -m <註釋文字>
,經過git push — tags origin master
將標籤推到遠程。
咱們能夠經過 npm dist-tag ls [<pkg>]
來查看一個包的tag,通常來講咱們至少會有三種類型的標籤
若是咱們須要發佈一個測試版本,在發佈的時候須要執行
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/…