如何设置 Travis CI 以使用链接(本地)包?

How to set up Travis CI to use linked (local) packages?

我在 myPackage 中使用 npm link myDependency 这样我就可以同时处理两者(相对于在每次更改后发布 myDependency 然后更新 myPackage 到测试一下。)

我希望能够将 Travis CI 与 myPackage 一起使用,但是,正如人们所期望的那样(我实际上忘记了,但在尝试构建后变得非常明显):运行 npm install 在 Travis 上无法安装链接包。

那么,我能做什么?我看到有人建议使用 Docker 容器,但这感觉像是很多基础设施,而且我没有使用 Docker 的经验。我想到的另一个选择是添加预安装脚本以将 myDependency 存储库的开发分支克隆到 node_modules 文件夹中。

不过,首先,我确定我不是第一个同时处理两个软件包的人,因此必须就如何应该达成共识完成。

我通过在 Travis 上复制我的开发设置解决了这个问题。

解决此问题的关键在于为 Travis 提供一种访问 GitHub 的方法。为此,请登录 GitHub 并转到“个人访问令牌”页面。

您会看到一个表单,其中包含您的令牌名称以及您要授予访问权限的字段。在 "repo" 部分填写 "Travis CI Pull Repo" 和 select 等名称。 None 其他人是必需的,因此无需授予他们访问权限。页面底部是一个绿色按钮"Generate token."

返回代码编辑器,在项目的根目录中创建一个 .travis.yml 文件(如果您还没有)。我们将在下一步中使用 RubyGem,因此如果您没有安装 Ruby gems,则需要下载它。您可以在终端中通过 运行ning gem -v 检查是否已安装。

如果你这样做,运行在终端下面安装Travis RubyGem:

gem install travis

接下来,在终端中,确保您在项目的根目录中工作,并使用 Travis gem 将访问令牌添加到您的 .travis.yml 文件:

travis encrypt GH_TOKEN="token-from-github-goes-here" --add

如果你成功了,你的 .travis.yml 文件应该有一堆随机文本和保存的加密令牌:

env:
  global:
    secure: "lots-of-seemingly-random-characters"

就是这样! Travis 现在应该能够拉取(如果您喜欢的话,还可以推送)到您的 GitHub 存储库。

显然你的 .travis.yml 文件可能与我的有很大不同,但最基本的是,我这样设置 .travis.yml

language: node_js
node_js:
- '6'
cache:
  directories:
    - node_modules
install:
- npm install
script:
- npm run lint
- npm run test
env:
  global:
    secure: "lots-of-seemingly-random-characters"

要添加克隆和 linking 依赖项,请使用以下命令添加 before_install 部分:

before_install:
- git config credential.helper "store --file=.git/credentials"
- echo "https://${GH_TOKEN}:@github.com" > .git/credentials
- cd ..
- git clone https://github.com/my-name/my-dependency.git my-dependency
- cd my-dependency
- npm install
- npm link
- cd ../my-main-project

这到底在做什么?

  1. 我们配置 Git 以使用我们保存的访问令牌。
  2. 我们向上一个目录并将存储库克隆到一个与存储库同名的新文件夹中。
  3. 我们进入存储库并安装其依赖项。 我们创建一个全球 NPM link.
  4. 最后,我们 return 进入主项目(我们正在 运行ning Travis 上的项目)。请注意,此名称必须与 GitHub 上的存储库名称匹配,因为这是 Travis 将使用的名称。

此外,我们需要实际使用上面创建的 link,因此在安装部分添加以下行:

install:
- npm install
- npm link my-dependency

确保将 npm link 放在 npm install 之后,因为默认情况下 npm install 会清除所有 link(对于我们这些使用 npm link).