And*_*ler 8 node.js npm package.json
我们希望向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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人更新package.json但忘记将更改提交到package-lock.json.
后:
// package.json
{
"lodash": "~3.2.0"
}
// package-lock.json (not changed)
{
"dependencies": {
"lodash": {
"version": "3.1.3"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在package-lock.json不再反映文件的有效依赖项解析集package.json.
Runningnpm ls似乎为您执行此操作,因为它会因package.json与其lock之间的差异而引发错误。在节点脚本中,您可以使用节点的child_process.exec或.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 =)");
});
Run Code Online (Sandbox Code Playgroud)
或者为了简单起见,您可以npm ls在npm install.
...
或者为了简单起见,您可以在安装 npm 之前在 CI 中的某个点运行 npm ls。
当没有 node_modules 时,它不包括初始 npm install 的情况(在 CI 服务器的情况下可能每次都是这样)
使用自 5.7.x 版本起可用的npm ci ( https://docs.npmjs.com/cli/ci )。
npm 错误!仅当您的 package.json 和 package-lock.json 或 npm-shrinkwrap.json 同步时,cipm 才能安装包。在继续之前,请使用 `npm install` 更新您的锁定文件。 npm 错误! npm 错误! npm 错误!无效:锁文件的 core-js@2.5.7 不满足 core-js@^3.0.0-alpha.4
小智 5
使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |