N'B*_*yev 5 node.js npm gitlab gitlab-ci gitlab-ci-runner
我正在使用npm在我的项目中安装 Node.js 依赖项。我想在node_modules全局缓存 Node.js 包 ( ) 以在部署到 Heroku 时加速管道中的作业。GitLab官方文档中的一个示例:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm/
before_script:
- npm ci --cache .npm --prefer-offline
Run Code Online (Sandbox Code Playgroud)
这是GitLab 中的另一个示例:
cache:
paths:
- node_modules/
Run Code Online (Sandbox Code Playgroud)
发现了一些文章(部署Node.js的应用程序与GitLab CI / CD,持续集成用的Node.js,Heroku的和GitLab CI / CD第2部分),该使用上述的第二构型。我确实试了一下,我能够使用这些设置成功地将我的应用程序部署到 Heroku。但我不确定缓存机制是否正常工作。
这些配置有什么区别?哪一种是最方便的缓存 Node.js 包的方法?
我当前的gitlab-ci.yml文件设置:
image: node:latest
cache:
paths:
- node_modules/
stages:
- build
- deploy
build:
stage: build
script:
- npm i
- npm i -g gulp-cli
- gulp build
deploy:
image: ruby:latest
stage: deploy
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY
only:
- master
Run Code Online (Sandbox Code Playgroud)
不确定我是否以正确的方式做。
这取决于你是否想使用npm install,又名npm i,或者如果你想使用npm ci。
npm install将首先查找现有node_modules文件夹并重新使用它。如果没有,将获取依赖项。检查完整的算法。
npm ci相反,删除现有node_modules文件夹以执行依赖项的全新安装。来自文档:
简而言之,使用
npm install和 之间的主要区别npm ci是:
- 该项目必须有一个现有的
package-lock.json或npm-shrinkwrap.json.- 如果包锁中的依赖项与 package.json 中的依赖项不匹配,
npm ci则会出现错误并退出,而不是更新包锁。npm ci一次只能安装整个项目:无法使用此命令添加单个依赖项。- 如果
node_modules已经存在,它将在npm ci开始安装之前自动删除。- 它永远不会写入
package.json或任何package-locks: 安装基本上被冻结。
一些测试具有~/.npm并node_modules填充:
$ npm i --prefer-offline
#...
updated 2 packages in 17.472s
$ rm -rf ~/.npm/ # removes global npm cache
$ npm i --prefer-offline
#...
up to date in 16.271s # removing npm cache does not affects to npm i
$ rm -rf node_modules/
$ npm i --prefer-offline
#...
added 2525 packages from 1197 contributors in 55.388s # removing node_modules affetcs to npm i
Run Code Online (Sandbox Code Playgroud)
$ npm ci --prefer-offline
#...
updated 2 packages in 17.201s
$ rm -rf ~/.npm/ # removes global npm cache
$ npm ci --prefer-offline
#...
added 2532 packages in 48.362s # removing npm cache affects to npm ci
$ rm -rf node_modules/
$ npm ci --prefer-offline
#...
added 2532 packages in 18.695s # removing node_modules does not affetcs to npm ci
Run Code Online (Sandbox Code Playgroud)
因此,最终,npm ci具有面向 CI 的功能,使用起来可能很有趣,但如果对您没有好处,只需缓存node_modules并使用npm install即可。
| 归档时间: |
|
| 查看次数: |
2834 次 |
| 最近记录: |