在package.json中仅使用严格/固定版本的npm模块,否则CI将会失败

时间:2019-07-18 20:45:42

标签: bash shell continuous-integration package.json

项目才刚刚开始,我的团队成员安装的模块没有严格的版本,例如npm i some_package,但是我认为它是bug in production,所以我有一个package.json文件

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "keywords": [],
  ...something else...,
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "0.19.0",
    "express": "~4.17.1",
    "pg": "^7.11.0"
  },
  "devDependencies": {
    "sinon": "7.3.2",
    "ts-node": "~8.3.0",
    "typescript": "^3.5.3"
  }
}

如您所见,^7.11.0~4.17.1字段中有插入号(0.19.0),波浪号(dependencies)和固定(devDependencies)npm模块< / p>

我希望只有固定的dependenciesdevDependencies通过我的Gitlab / Github CI管道,否则CI应该会失败(exit code 1)。

我认为我需要为此编写shell脚本,例如cat package.json | check ^ and ~ ...

上面的示例应该失败,下面的示例应该通过

"dependencies": {
  "axios": "0.19.0",
  "express": "4.17.1",
  "pg": "7.11.0"
},
"devDependencies": {
  "sinon": "7.3.2",
  "ts-node": "8.3.0",
  "typescript": "3.5.3"
}

此shell脚本的外观如何?

1 个答案:

答案 0 :(得分:1)

您必须使用所谓的锁定文件,请参见https://yarnpkg.com/lang/en/docs/yarn-lock/https://docs.npmjs.com/files/package-locks

这个想法是您将 <img src="images/phone1.png" width="100" height="100" id="phoneImg" class="contactImgs" data-toggle="popover" tabindex="50" data-content="test <b>text</b>" data-placement="right" /> .popover { background-color: #f8be94; border:none; } .popover .arrow::before { background-color: #f8be94 !important; } 文件中的锁定文件提交到git存储库。锁定文件包含依赖性的固定版本。

设置完成后,您可以使用以下命令在ci中运行npm:

package.json

npm ci

如果yarn --frozen-lockfile 与锁定文件不匹配,则CI将失败。