2

有没有办法在不运行的情况下检查package-lock.json文件是否兼容?兼容意味着指定的版本可以满足。package.jsonnpm installpackage.jsonpackage-lock.json

目前的方法

我目前正在通过运行npm install并检查是否package-lock.json像这样更改来检查这一点:

git clone https://github.com/my/codebase
cd codebase
npm install
if [[ git diff-index --quiet HEAD -- package-lock.json ]]; then
  echo 'ERROR: npm install changed package-lock.json'
fi

用例

我想在持续集成中添加一个测试,以确保如果开发人员修改package.json他们也会package-lock.json相应地更新。这很重要的原因是我们的持续集成使用npm ci而不是npm install. npm cionly references package-lock.json,因此如果开发人员不更新锁定文件,则持续集成设置将与他们期望的不匹配。

4

2 回答 2

2

正如评论中提到的那样,有一个npm ci命令,如果package.jsonpackage-lock.json.

这是我用来“测试”它们是否处于同等地位的方法:

ERRORS=0
npm ci
if [[ "$?" -ne 0 ]]; then
    echo "Dependency installation failed!"
    ERRORS=$(($ERRORS+1))
fi

我正在寻找一种更好的方法来执行此操作,因为这实际上会删除整个node_modules目录,确认奇偶校验,然后如果一切正常,则继续安装锁定的版本,但这需要一些时间,具体取决于包的数量。

于 2020-09-25T23:00:31.963 回答
0

我花了几个月的时间才发现这npm ci不是你的朋友,因为它会错过从 package.json intopackage-lock.json . Thus I think that the answer is npm install --production同步更新的引擎

所有的荣誉都应该去https://stackoverflow.com/a/19824154/99834详细解释它。为方便起见,我将提到最重要的部分:

  • npm install--production除非添加标志,否则将安装/更新 devDependencies
  • npm update--dev除非添加标志,否则将忽略 devDependencies
于 2021-10-15T07:51:15.067 回答