如何配置Travis CI以使用npm link关联的本地包?
解决Travis CI中npm link本地依赖的问题
我之前也碰到过和你完全一样的场景——本地用npm link联动开发两个包,但是Travis CI的干净环境里根本找不到被链接的依赖,又不想折腾Docker。这里有几个轻量且实用的解决方案:
方案一:在Travis中手动克隆并建立链接
这是最贴近本地开发流程的方法,直接在Travis的构建脚本里复刻你本地的npm link操作:
- 修改你的
.travis.yml,在install步骤前添加克隆依赖包的命令:
before_install: # 克隆你的myDependency仓库到Travis环境 - git clone https://github.com/your-username/myDependency.git ../myDependency # 进入依赖包目录安装它的依赖 - cd ../myDependency && npm install # 把myDependency链接到全局 - npm link # 回到myPackage目录 - cd ../myPackage install: # 链接myDependency到当前项目 - npm link myDependency # 安装项目其他依赖 - npm install
如果myDependency是私有仓库,记得在Travis的项目设置里添加GitHub访问令牌(GITHUB_TOKEN),然后把克隆命令改成:
- git clone https://${GITHUB_TOKEN}@github.com/your-username/myDependency.git ../myDependency
方案二:用file:协议替代npm link
本地开发时依然用npm link方便调试,但在package.json里把myDependency的依赖声明改成本地路径,让Travis自动识别安装:
- 在
myPackage的package.json中修改依赖:
"dependencies": { "myDependency": "file:../myDependency" }
- 在
.travis.yml中确保myDependency被克隆到正确的相对路径:
before_install: # 在myPackage的同级目录克隆myDependency - git clone https://github.com/your-username/myDependency.git ../myDependency install: # npm install会自动处理file:路径的依赖 - npm install
这个方案不用手动执行link命令,npm会自动把本地的myDependency打包安装到myPackage的node_modules里,更省心。
方案三:生成tar包后安装
如果不想处理相对路径,也可以把myDependency打包成tar包,让myPackage直接安装这个包:
- 在
.travis.yml中添加打包和安装步骤:
before_install: - git clone https://github.com/your-username/myDependency.git ../myDependency - cd ../myDependency && npm install && npm pack # 把生成的tar包复制到myPackage目录 - cp myDependency-*.tgz ../myPackage/ - cd ../myPackage install: # 安装tar包形式的myDependency - npm install myDependency-*.tgz # 安装其他依赖 - npm install
额外优化建议
- 启用Travis的缓存功能,缓存
myDependency的node_modules,减少每次构建的安装时间:
cache: directories: - ../myDependency/node_modules - node_modules
- 如果
myDependency的更新不频繁,可以考虑在Travis里只在特定条件下更新它(比如当myDependency的仓库有新提交时),进一步加快构建速度。
内容的提问来源于stack exchange,提问作者Ian Paschal
相关产品推荐
相关产品推荐

