[译] 使用 Travis CI 自动发布 npm

使用 Travis CI 自动发布 npm

npm 注册表发布一个包应该是很无聊的,在这篇博客中,我描述了如何在每次打 git 标签时使用 Travis CI 来发布 npm 包。前端

使用 Travis CI 自动发布 npm

在 TailorDev,咱们喜欢自动化构建软件所需的许多重要步骤。其中一个步骤是发布最终的,便可生产的应用程序包,也称为工件或者包。今天,咱们关注于 JavaScript 世界,描述如何不花费太大心血而在 npm 注册表中实现包的自动化发布过程。node

首先,npm 在 2017 年推出了 双因素认证 (简称 2FA),这是一个很好的想法,直到咱们发现了它是“所有或者没有”!:confused:。事实上, npm 2FA 依赖于一次性密码来保护帐户以及与您帐户相关的全部内容,并自动实现这一功能,从而没法实现 2FA 的功能。android

**可是为何这会如此重要呢?**我很高兴您会这么问,由于咱们在续集中须要一个 API 令牌,并且目前不可能在不触发 2FA 机制的状况下生成和使用令牌。换句话说,启用 2FA,几乎不可能自动化 npm 发布过程,“几乎”是由于 npm 实现了双级别身份认证: auth-onlyauth-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_EMAILNPM_TOKENgithub

Travis CI 设置

如今,最重要的部分是建立一个实际发布 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 CI 输出带有两个 JavaScript 任务

咱们如今能够经过将如下配置添加到以前的 .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

带有 JavaScript 的 Travis CI

这很酷,不是么?

:sunglasses:
:sunglasses:

优势:npm 像专业版同样发布

为了建立新版本,咱们使用 npm 版本 (它内置在 npm

:rocket:
:rocket:
)。假设咱们当前版本是 0.3.2,咱们想发布 0.3.3。在 master 分支上,咱们运行如下命令

**$ npm version patch**
复制代码

该命令执行如下任务:

  1. package.json 中插入(更新)的版本号
  2. 建立一个新的提交
  3. 建立一个 git 标签

咱们可使用 npm version minor0.3.1 发布 0.4.0 (它会颠倒第二个数字并重置最后一个数字)。咱们也可使用 npm version major0.3.1 发布 1.0.0

一旦使用 npm version 命令完成后,您就能够运行 git push origin master --tag 并稍等片刻,直到包在 npm 注册表上发布。

:tada:
:tada:


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索