- 原文地址: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、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。