npm 发布

此页面记录了使用 dpl v1 进行的部署,目前是默认版本。下一个主要版本 dpl v2 将很快发布,我们建议您开始使用它。有关详细信息,请参见 我们的博客文章。您可以 在此处找到 dpl v2 文档

Travis CI 可以在成功构建后自动将您的 npm 包发布到 npmjs.com 或其他类似 npm 的注册表。默认情况下,Travis CI 发布到 npmjs.com,但是,如果您在 package.json 中有 publishConfig.registry 键,那么 Travis CI 将发布到该注册表。

使用 npm 版本 2+ 发布到 npmjs.com 的最小 .travis.yml 配置如下

language: node_js
node_js:
  - "12.13"

deploy:
  provider: npm
  email: "YOUR_EMAIL_ADDRESS"
  api_key: "YOUR_AUTH_TOKEN"

您可以使用 travis 工具为您设置所有内容

$ travis setup npm

请记住,上面的命令必须在您的项目目录中运行,以便它可以为您修改 .travis.yml

NPM 身份验证令牌 #

您可以通过以下方式获取 NPM 身份验证令牌:

  1. 登录您的 NPM 帐户,并在 https://npmjs.net.cn/settings/USER/tokens 上生成一个新令牌,其中 USER 是能够发布 npm 包的用户帐户的名称。
  2. 使用 NPM CLI 命令 npm adduser 创建用户,然后打开 ~/.npmrc 文件
    1. 对于 NPM v2+,请使用 authToken 值。
    2. 对于 NPM ~1,请使用 auth 值。

始终 加密 您的身份验证令牌。假设您已安装 Travis CI 命令行客户端,您可以像这样操作

$ travis encrypt YOUR_AUTH_TOKEN --add deploy.api_key

要发布什么 #

您可能只想在发布包的新版本时才部署到 npm。为此,您可以告诉 Travis CI 只对标记的提交进行部署,如下所示

deploy:
  ...
  on:
    tags: true

如果您在本地标记提交,请记住运行 git push --tags 以确保您的标签已上传到 GitHub。

您可以使用 on 选项显式指定要从中发布的分支

deploy:
  ...
  on:
    branch: production

或者,您还可以配置 Travis CI 从所有分支发布

deploy:
  ...
  on:
    all_branches: true

从拉取请求触发的构建将永远不会触发发布。

发布构建工件 #

在您的测试运行完毕且在发布之前,Travis CI 将清理您所做的任何其他文件和更改。

这可能不是您想要的,因为您可能会生成一些也应该发布的工件。现在有一个选项可以跳过清理

deploy:
  ...
  skip_cleanup: true

条件发布 #

当多次尝试时,部署问题 会报告。我们建议只使用 具有 on: 的条件发布 从一个作业进行部署。

标记发布 #

您可以使用 tag 选项自动添加 npm 分发标签

deploy:
  ...
  tag: next

关于 .gitignore 的说明 #

请注意,如果 .npmignore 不存在,npm 部署将尊重 .gitignore。这意味着,如果您的构建在 .gitignore 中列出的位置创建工件,则它们将不会包含在上传的包中。

有关更多详细信息,请参见 npm 文档

如果您的 .gitignore 文件与您的构建创建的内容相匹配,请使用 before_deploy 更改其内容,或创建(可能是空的).npmignore 文件来覆盖它。

在部署前后运行命令 #

有时您想在部署之前或之后运行命令。您可以使用 before_deployafter_deploy 阶段来完成此操作。这些将仅在 Travis CI 实际部署时触发。

before_deploy: "echo 'ready?'"
deploy:
  ..
after_deploy:
  - ./after_deploy_1.sh
  - ./after_deploy_2.sh

排查“npm ERR! 您需要付费帐户才能执行此操作。” #

npm 假设 作用域包 默认情况下是私有的。您可以通过将以下内容添加到您的 package.json 文件中,显式地告诉 npm 您的包是公共包,并避免此错误

  "publishConfig": {
    "access": "public"
  },