有些人會說:publish
模塊包,有什麼難的?直接npm publish
不就行了麼?react
其實否則,咱們還會有這樣的問題:git
在github
有一個包np,彷佛能解決上面的問題。github
在必定程度上確實是能夠。npm
按照np
的發包流程,必需要先提交commit
,但有時候,咱們只是說想發個測試包給其餘小夥伴,由於也不知道是否正確,因此不是很想先commit
。json
因此咱們必需要實現--no-git
的功能,即當有這個args
的時候,能夠繞過np
的規範,進行包的提交。markdown
不過這裏有一個建議是,在scripts
裏面放兩條命令:antd
{ "scripts": { "pub:test": "np --no-git", "pub": "np" } } 複製代碼
在發測試包
的時候,用上面那條命令。發正式版本
的時候,用pub
命令。app
當選擇(確認)了版本號以後,np
會對package.json
的version
修改,而且提交commit
,生成本地tag
。工具
這個問題會致使,發一個測試包
,最終也會生成一個tag,並且還有commit
提交記錄。oop
那麼是什麼緣由致使的?我找了很久,終於找到罪魁禍首
,剛開始的時候,我都不敢相信:
是的,你沒看錯:
yarn version --version 版本號
複製代碼
就是作了如下幾個事:
一般咱們作一個規範點的組件包
,都會使用commitizen
。
固然還要結合.commitlintrc
,來規範和約束咱們的commit message
。
那麼問題來了:
yarn version --verion 版本號
的commit message
type
叫什麼比較好?我我的這邊給起的type
值是publish
。隨後咱們找一下文檔,發現yarn
有相似的命令是提供出來的:(npm也是能夠經過查文檔找到)
yarn config set version-git-message "v%s" 複製代碼
如何守護npm publish
命令,就是在當前模塊包下,禁用npm publish
,轉而使用yarn pub
來發布模塊包。
在antd-tools
裏面其實有提供guard
的命令,咱們簡單翻一下源碼就能夠清楚了,核心是這句話:
看明白了源碼,真要發包,也能夠經過:
npm publish --with-antd-tools
複製代碼
從np
的角度來看,咱們還要想辦法傳一些相似--with-antd-tools
的標識。
算是第四個問題的延伸,一般第四個問題要守護
的話,作法是這樣的:
{ "scripts": { "prepublish": "antd-tools run guard", "prepare": "antd-tools run guard", "prepublishOnly": "antd-tools run guard", } } 複製代碼
若是咱們想要在publish
前進行build
或者compile
或者執行其餘命令,要放在哪裏?
固然你能夠選擇prepublishOnly
命令,經過&&
和守護關聯起來。
antd-tools
的作法是經過pre-publish
的命令,在該工具中,publish
執行的時候,就會先運行pre-publish
。
因此咱們其實也能夠考慮放到np
這個包裏面去。固然執行時機是在test
以後,由於test
沒有經過,執行build
或者其餘的,我的感受意義不大。
結束了麼?不不不,上面所說的只是普通組件發佈。
在一些場景下,咱們須要使用lerna
來創建多個packages
。
那麼問題來了,怎麼維護tags
,由於默認的發包tags
是這樣的:
我試圖從create-react-app
上尋找他們的方案:
OK,那麼也就是咱們要調整一下下面的這個參數了:
經過對以上六個問題的思考,咱們能夠明白publish
裏面包含了不少不少東西。
有些坑,咱們不去踩,永遠都不知道這裏面有些什麼東西。