你真的懂`npm publish`?

有些人會說:publish模塊包,有什麼難的?直接npm publish不就行了麼?react

其實否則,咱們還會有這樣的問題:git

  • 單元測試是否經過?
  • 我怎麼發測試包?
  • 發佈以後可否打個tag?

github有一個包np,彷佛能解決上面的問題。github

alt

在必定程度上確實是能夠。npm

第一個問題

按照np的發包流程,必需要先提交commit,但有時候,咱們只是說想發個測試包給其餘小夥伴,由於也不知道是否正確,因此不是很想先commitjson

因此咱們必需要實現--no-git的功能,即當有這個args的時候,能夠繞過np的規範,進行包的提交。markdown

不過這裏有一個建議是,在scripts裏面放兩條命令:antd

{
   "scripts": {
       "pub:test": "np --no-git",
       "pub": "np"
   }
}
複製代碼

在發測試包的時候,用上面那條命令。發正式版本的時候,用pub命令。app

第二個問題

當選擇(確認)了版本號以後,np會對package.jsonversion修改,而且提交commit,生成本地tag工具

這個問題會致使,發一個測試包,最終也會生成一個tag,並且還有commit提交記錄。oop

那麼是什麼緣由致使的?我找了很久,終於找到罪魁禍首,剛開始的時候,我都不敢相信:

alt

是的,你沒看錯:

yarn version --version 版本號
複製代碼

就是作了如下幾個事:

  • git add
  • git commit
  • git tag

第三個問題

一般咱們作一個規範點的組件包,都會使用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的命令,咱們簡單翻一下源碼就能夠清楚了,核心是這句話:

alt

看明白了源碼,真要發包,也能夠經過:

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是這樣的:

alt

我試圖從create-react-app上尋找他們的方案:

alt

OK,那麼也就是咱們要調整一下下面的這個參數了:

alt

結語

經過對以上六個問題的思考,咱們能夠明白publish裏面包含了不少不少東西。

有些坑,咱們不去踩,永遠都不知道這裏面有些什麼東西。

相關文章
相關標籤/搜索