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

时间:2018-05-06 09:08:09

标签: node.js npm package install travis-ci

我在npm link myDependency中使用myPackage,以便我可以同时处理这两项工作(相对于每次更改后发布myDependency,然后更新myPackage以对其进行测试。)

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

那么,我该怎么办?我看到有人建议使用Docker容器,但感觉就像很多基础设施,而且我对Docker没有经验。我想到的另一个选项是添加一个预安装脚本来将myDependency repo的dev分支克隆到node_modules文件夹中。

首先,我确定我不是第一个同时在两个包装上工作过的人,所以必须就如何 完成

1 个答案:

答案 0 :(得分:0)

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

解决这个问题的关键是让Travis获得访问GitHub的方法。为此,请登录GitHub并转到Personal access tokens页面。

您会看到一个表单,其中包含令牌名称的字段以及您要授予其访问权限的权限。填写一个名称,例如" Travis CI Pull Repo"并选择" repo"部分。其他都不是必需的,因此无需访问它们。在页面底部是一个绿色按钮"生成令牌。"

返回代码编辑器,如果您还没有项目的根目录,请在项目的根目录中创建一个.travis.yml文件。我们将在下一步使用RubyGem,因此如果您没有安装Ruby gem,则需要下载它。您可以通过在终端中运行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"

就是这样!特拉维斯现在应该可以拉(并推送你的内容)到你的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"

要添加依赖项的克隆和链接,请使用以下命令添加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链接。
  4. 最后,我们返回主项目(我们正在运行Travis的项目)。请注意,此名称必须与GitHub上的存储库名称匹配,因为这是Travis将使用的名称。
  5. 此外,我们需要实际使用上面创建的链接,因此在安装部分添加以下行:

    install:
    - npm install
    - npm link my-dependency
    

    确保在npm install之后添加npm链接,因为默认情况下npm install会删除任何链接(对于我们这些使用npm link的人而言,这是一个非常烦人的错误。)