我们希望向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
文件的有效依赖项解析集。
答案 0 :(得分:2)
正在运行npm ls
似乎是为您执行此操作,因为它会因package.json及其lock之间的差异而引发错误。在节点脚本中,您可以使用节点child_process.exec
或postgres=# create database db1; create database db2;
CREATE DATABASE
CREATE DATABASE
postgres=# revoke connect on database db1, db2 from public;
REVOKE
postgres=# create role foo with login password 'bar' nocreatedb nocreaterole;
CREATE ROLE
postgres=# set role foo;
SET
postgres=> create role win with login password 'amp' nocreatedb nocreaterole;
ERROR: permission denied to create role
postgres=> set role nd;
SET
postgres=# grant usage on schema nd to foo;
GRANT
postgres=# grant execute on function nd.fn_create_role(text, text, text[]) to foo;
GRANT
postgres=# set role foo;
SET
postgres=> select nd.fn_create_role('win', 'amp', '{db1}');
┌────────────────┐
│ fn_create_role │
╞════════════════╡
│ │
└────────────────┘
(1 row)
执行此操作。如果您想要包含有用的消息,Async似乎更清晰:
.execSync
或者为了简单起见,您可以在const cp = require("child_process");
const verify = () => cp.exec("npm ls", error => {
if (error) {
console.error("Dependency mismatch between package.json and lock. Run: npm install");
throw error;
}
console.log("Dependencies verified =)");
});
之前的CI中的某个位置运行npm ls
。
答案 1 :(得分:2)
...
或者为了简单起见,您可以在安装npm之前先在CI中运行npm ls。
如果没有node_modules(每次CI服务器可能都是这种情况),则不包括初始npm安装的情况
使用从5.7.x版本开始可用的npm ci(https://docs.npmjs.com/cli/ci)。
npm ERR! cipm can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing. npm ERR! npm ERR! npm ERR! Invalid: lock file's core-js@2.5.7 does not satisfy core-js@^3.0.0-alpha.4
答案 2 :(得分:0)
使用npm ci
命令。它会检查以确保package.json
和package-lock.json
始终保持同步。
如果它们不同步,您将收到类似于
的错误npm ERR!
npm ERR! Invalid: lock file's yuglify@2.0.0 does not satisfy yuglify@^2.0.1