【问题标题】:Check that NPM package.json and package-lock.json are compatible检查 NPM package.json 和 package-lock.json 是否兼容
【发布时间】:2020-01-19 18:20:02
【问题描述】:

有没有办法在不运行npm install 的情况下检查package-lock.json 文件是否与package.json 兼容?兼容意味着package.json指定的版本可以由package-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 installnpm ci 只引用了package-lock.json,所以如果开发者不更新锁文件,持续集成的设置将不符合他们的预期。

【问题讨论】:

  • 如果 package.json 和 package-lock.json 不同步,npm ci 将失败,因此您的持续集成已经在测试您的用例。您能否提供更多关于您发现的开发人员设置与 CI 设置之间差异的信息?
  • 是的,我验证了这适用于版本号。但是,我发现在使用 Git 修订版时情况并非如此。复制和详细信息npm.community/t/…

标签: npm dependencies package.json package-lock.json


【解决方案1】:

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

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

  • npm install 将安装/更新 devDependencies,除非添加了 --production 标志
  • npm update 将忽略 devDependencies,除非添加了 --dev 标志

【讨论】:

    【解决方案2】:

    正如 cmets 中的某人所提到的,有 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-05-13
      • 2021-05-14
      • 2020-01-16
      • 2020-09-24
      • 2017-12-16
      • 2018-10-06
      • 2019-03-10
      • 2019-09-05
      • 2022-08-15
      相关资源
      最近更新 更多