检查 NPM package.json 和 package-lock.json 是否兼容

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

有没有办法在不运行

package-lock.json
的情况下检查
package.json
文件是否与
npm install
兼容? 兼容意味着
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 install
npm ci
仅引用
package-lock.json
,因此如果开发人员不更新锁定文件,持续集成设置将不会符合他们的预期。

npm dependencies package.json package-lock.json
3个回答
3
投票

正如评论中有人提到的,有

npm ci
命令,如果
package.json
package-lock.json
不同步,它将抛出错误。

这是我用来“测试”它们是否平等的方法:

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

我正在寻找一种更好的方法来执行此操作,因为这实际上会删除整个

node_modules
目录,确认奇偶校验,然后在一切正常的情况下继续安装锁定版本,但这需要一些时间,具体取决于软件包的数量.


0
投票

我花了几个月的时间才发现

npm ci
不是你的朋友,因为它会错过从package.json同步更新的引擎
into
package-lock.json
. Thus I think that the answer is 
npm install --生产`

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

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

0
投票

跑步

npm ci --dry-run --ignore-scripts 

是一种快速、简单的方法来检查

package-lock.json
package.json
文件是否同步,而无需实际安装任何依赖项。 (如果您没有任何安装后脚本,则可以省略
--ignore-scripts

在 CI 环境中,一个很好的用例是当您使用

node_modules
的校验和作为缓存键来恢复缓存的
package-lock.json
文件夹时。 (请参阅 https://circleci.com/docs/caching/ 了解如何完成此操作的一个示例)

恢复缓存后执行

npm ci --dry-run
只需要几秒钟,如果更新了
package.json
依赖项但开发者未能将相应更改提交到
package-lock.json

,则会导致 PR 作业失败
© www.soinside.com 2019 - 2024. All rights reserved.