有没有办法确认 package-lock.json 确实解决了 package.json 中的所有依赖项?

问题描述 投票:0回答:4

我们希望向 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
文件的一组有效的依赖关系解析。

node.js npm package.json
4个回答
10
投票

运行

npm 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 =)");
});

或者为了简单起见,您可以在 CI 中的某个时刻在

npm ls
之前运行
npm install


6
投票

...

或者为了简单起见,您可以在 npm install 之前在 CI 中的某个时刻运行 npm ls 。

它不包括没有node_modules时初始npm安装的情况(在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@^3.0.0-alpha.4

5
投票

使用

npm ci
命令。它会检查以确保
package.json
package-lock.json
始终同步。

如果它们不同步,您会收到类似以下内容的错误

npm ERR! 

npm ERR! Invalid: lock file's [email protected] does not satisfy yuglify@^2.0.1

0
投票

这个 stackoverflow 答案我找到了我现在正在使用的解决方案,这是一个执行此检查的小包。

我特别想检查 npm install 是否根本不会更改我的包锁定,因为我总是在更新包版本后忘记运行 npm install 之类的事情,所以 package-lock-utd 是正确的解决方案对我来说。

© www.soinside.com 2019 - 2024. All rights reserved.