- 原文地址:Automated npm releases with Travis CI
- 原文作者:TailorDev
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:talisk、liang-kai
使用 Travis CI 自動釋出 npm
在 npm 登錄檔釋出一個包應該是很無聊的,在這篇部落格中,我描述瞭如何在每次打 git 標籤時使用 Travis CI 來發布 npm 包。
在 TailorDev,我們喜歡自動化構建軟體所需的許多重要步驟。其中一個步驟是釋出最終的,即可生產的應用程式包,也稱為工件或者包。今天,我們關注於 JavaScript 世界,描述如何不花費太大心血而在 npm 登錄檔中實現包的自動化釋出過程。
首先,npm 在 2017 年推出了 雙因素認證 (簡稱 2FA),這是一個很好的想法,直到我們發現了它是“全部或者沒有”!:confused:。事實上, npm 2FA 依賴於一次性密碼來保護賬戶以及與您賬戶相關的所有內容,並自動實現這一功能,從而無法實現 2FA 的功能。
**但是為什麼這會如此重要呢?**我很高興您會這麼問,因為我們在續集中需要一個 API 令牌,而且目前不可能在不觸發 2FA 機制的情況下生成和使用令牌。換句話說,啟用 2FA,幾乎不可能自動化 npm 釋出過程,“幾乎”是因為 npm 實現了雙級別身份認證: auth-only
和 auth-and-writes
。通過將 2FA 的使用限制在 auth-only
上,我們就可以使用 API 令牌,但安全性較低。我們真的希望 npm 可以在不久的將來為自動化任務設計的 auth 令牌,同時:
$ npm profile enable-2fa auth-only
複製程式碼
一旦您的賬戶啟用了 auth-only
用法的 2FA (順便說一句,這比沒有啟用 2FA 更好),那就讓我們開始建立一個令牌:
$ npm token create
+----------------+--------------------------------------+
| token | a73c9572-f1b9-8983-983d-ba3ac3cc913d |
+----------------+--------------------------------------+
| cidr_whitelist | |
+----------------+--------------------------------------+
| readonly | false |
+----------------+--------------------------------------+
| created | 2017-10-02T07:52:24.838Z |
+----------------+--------------------------------------+
複製程式碼
這個令牌將由 Travis CI 用於代表您進行身份驗證。我們也可以使用 Travis CLI 將該令牌作為環境變數進行加密或者在 Travis CI 儲存庫設定中定義一個變數,,這樣做將會更方便。宣告兩個私密環境變數 NPM_EMAIL
和 NPM_TOKEN
:
現在,最重要的部分是建立一個實際釋出 npm 包的任務。我們決定利用構建階段(測試版)特性結合 Travis CI 推薦的方式釋出 npm 包。為了做記錄,我們希望每次構建版本只發布一次。不管現有的構建矩陣如何,我們還希望在釋出 npm 包時使用 git 標籤,以便在 npm 版本和 GitHub 版本之間保持一致。
我們從一個用於 JavaScript 專案的標準 .travis.yml
檔案開始,在該文中對程式碼進行了 Node 8 和 9 的測試,並使用 yarn 作為包管理器:
language: node_js
node_js:
- "8"
- "9"
cache: yarn
install: yarn
script:
- yarn lint
- yarn test
複製程式碼
我們現在可以通過將以下配置新增到之前的 .travis.yml
檔案中來配置“部署”任務:
jobs:
include:
- stage: npm release
if: tag IS present
node_js: "8"
script: yarn compile
before_deploy:
- cd dist
deploy:
provider: npm
email: "$NPM_EMAIL"
api_key: "$NPM_TOKEN"
skip_cleanup: true
on:
tags: true
複製程式碼
讓我們一行一行地分析。首先,當且僅當 IS 標籤存在
時,我們“加入”一個新的 npm 釋出階段,這意味著構建已經被 git 標記觸發。我們選擇 node 8
(我們的生產版本) 並執行 yarn compile
來構建我們的包。此指令碼會建立包含可以在 npm 登錄檔上釋出包檔案的 dist/
資料夾。最後但同樣重要的一點是,我們呼叫 Travis CI deploy
命令在 npm 登錄檔來實際釋出包(同時我們將此命令限制為 git 標記,僅作為額外的保護層)。
注意:為了防止 Travis CI 清理額外的資料夾並刪除你做的改變,請在釋出前將 skip_cleanup
設定為 true
。
這很酷,不是麼?
優點:npm 像專業版一樣釋出
為了建立新版本,我們使用 npm 版本
(它內建在 npm
0.3.2
,我們想釋出 0.3.3
。在 master
分支上,我們執行以下命令
**$ npm version patch**
複製程式碼
該命令執行以下任務:
- 在
package.json
中插入(更新)的版本號 - 建立一個新的提交
- 建立一個 git 標籤
我們可以使用 npm version minor
從 0.3.1
釋出 0.4.0
(它會顛倒第二個數字並重置最後一個數字)。我們也可以使用 npm version major
從 0.3.1
釋出 1.0.0
。
一旦使用 npm version
命令完成後,您就可以執行 git push origin master --tag
並稍等片刻,直到包在 npm 登錄檔上釋出。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。