- 原文地址:Automated npm releases with Travis CI
- 原文做者:TailorDev
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:talisk、liang-kai
在 npm 註冊表發佈一個包應該是很無聊的,在這篇博客中,我描述瞭如何在每次打 git 標籤時使用 Travis CI 來發布 npm 包。前端
在 TailorDev,咱們喜歡自動化構建軟件所需的許多重要步驟。其中一個步驟是發佈最終的,便可生產的應用程序包,也稱爲工件或者包。今天,咱們關注於 JavaScript 世界,描述如何不花費太大心血而在 npm 註冊表中實現包的自動化發佈過程。node
首先,npm 在 2017 年推出了 雙因素認證 (簡稱 2FA),這是一個很好的想法,直到咱們發現了它是「所有或者沒有」!:confused:。事實上, npm 2FA 依賴於一次性密碼來保護帳戶以及與您帳戶相關的全部內容,並自動實現這一功能,從而沒法實現 2FA 的功能。android
**可是爲何這會如此重要呢?**我很高興您會這麼問,由於咱們在續集中須要一個 API 令牌,並且目前不可能在不觸發 2FA 機制的狀況下生成和使用令牌。換句話說,啓用 2FA,幾乎不可能自動化 npm 發佈過程,「幾乎」是由於 npm 實現了雙級別身份認證: auth-only
和 auth-and-writes
。經過將 2FA 的使用限制在 auth-only
上,咱們就可使用 API 令牌,但安全性較低。咱們真的但願 npm 能夠在不久的未來爲自動化任務設計的 auth 令牌,同時:ios
$ npm profile enable-2fa auth-only
複製代碼
一旦您的帳戶啓用了 auth-only
用法的 2FA (順便說一句,這比沒有啓用 2FA 更好),那就讓咱們開始建立一個令牌:git
$ 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
:github
如今,最重要的部分是建立一個實際發佈 npm 包的任務。咱們決定利用構建階段(測試版)特性結合 Travis CI 推薦的方式發佈 npm 包。爲了作記錄,咱們但願每次構建版本只發布一次。無論現有的構建矩陣如何,咱們還但願在發佈 npm 包時使用 git 標籤,以便在 npm 版本和 GitHub 版本之間保持一致。npm
咱們從一個用於 JavaScript 項目的標準 .travis.yml
文件開始,在該文中對代碼進行了 Node 8 和 9 的測試,並使用 yarn 做爲包管理器:json
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 標記,僅做爲額外的保護層)。api
注意:爲了防止 Travis CI 清理額外的文件夾並刪除你作的改變,請在發佈前將 skip_cleanup
設置爲 true
。
這很酷,不是麼?
爲了建立新版本,咱們使用 npm 版本
(它內置在 npm
0.3.2
,咱們想發佈
0.3.3
。在
master
分支上,咱們運行如下命令
**$ npm version patch**
複製代碼
該命令執行如下任務:
package.json
中插入(更新)的版本號咱們可使用 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、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。