我们希望向CI服务器添加一个自动检查,以防止提交更新package.json
中的依赖项但不更新package-lock.json
中已解析的依赖项的代码。
例如,如果有人手动更新了package.json
中的依赖项,但运行了npm install
而不是npm update
,则可能会发生这种情况(npm install
支持package-lock.json
,如果存在)。或者,即使有人在更新依赖项时运行了正确的npm
命令,但随后忘记将结果更改提交到package-lock.json
,也可能发生这种情况。但是自动检查肯定会更好。有没有npm
命令可以做到这一点?
这里有一个例子来说明。
之前:
// package.json
{
"lodash": "~3.1.0"
}
// package-lock.json
{
"dependencies": {
"lodash": {
"version": "3.1.3"
}
}
}
字符串
有人更新了package.json
,但忘记将更改提交到package-lock.json
。
之后:
// package.json
{
"lodash": "~3.2.0"
}
// package-lock.json (not changed)
{
"dependencies": {
"lodash": {
"version": "3.1.3"
}
}
}
型
现在,package-lock.json
不再反映package.json
文件的有效依赖项解析集。
3条答案
按热度按时间3okqufwl1#
运行
npm ls
似乎可以为您做到这一点,因为它会在package.json和它的lock之间出现差异时抛出错误。在节点脚本中,您可以使用节点的child_process.exec
或.execSync
来执行此操作。如果您想包含有用的消息,异步似乎更清晰:字符串
或者为了简单起见,您可以在CI中的某个位置运行
npm ls
,然后再运行npm install
。g52tjvyc2#
...
或者为了保持简单,你可以在安装npm之前在CI中的某个时候运行npm ls。
它不包括没有node_modules的初始npm安装的情况(CI服务器每次都可能是这样)
使用自5.7.x版本起可用的npm ci(https://docs.npmjs.com/cli/ci)。
字符串
djmepvbi3#
使用
npm ci
命令。它检查以确保package.json
和package-lock.json
始终同步。如果它们不同步,则会出现类似以下的错误
字符串