在CI中,我想检查package-lock.json是否与package.json同步更新,为此我使用npm ci
。
但是我发现如果我在package.json中更新主包版本(但是忘记在package-lock.json中更新),那么npm ci
会通过而不会出错。
我遗漏了什么?如何检查匹配的根级别版本?
例如:
package.json:
{
"name": "demo",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {...}
}
package-lock.json:
x一个一个一个一个x一个一个二个x
^此操作应失败
1条答案
按热度按时间odopli941#
您可以使用
package-lock-utd
执行此操作(https://www.npmjs.com/package/package-lock-utd)。只需在项目的根目录中执行以下命令:
如果您的
package-lock.json
不是最新的(例如,因为您在更改“version”字段后忘记运行npm install
),脚本将以非零退出代码退出。我在运行npm ci
(或npm install
)之前在CI中使用此检查,因为正如您所注意到的,如果package-lock.json
不是最新的,npm ci
并不总是失败。GitHub操作工作流示例:
免责声明:我是这个软件包的作者。
过去,我在CI中使用了一个小shell脚本来执行此检查,但是,将此脚本从一个存储库复制到另一个存储库似乎不是最佳解决方案,这就是我创建此npm包的原因。