检查 NPM package.json 和 package-lock.json 是不是兼容
Posted
技术标签:
【中文标题】检查 NPM package.json 和 package-lock.json 是不是兼容【英文标题】: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 install
。 npm ci
只引用了package-lock.json
,所以如果开发者不更新锁文件,持续集成的设置将不符合他们的预期。
【问题讨论】:
如果 package.json 和 package-lock.json 不同步,npm ci
将失败,因此您的持续集成已经在测试您的用例。您能否提供更多关于您发现的开发人员设置与 CI 设置之间差异的信息?
是的,我验证了这适用于版本号。但是,我发现在使用 Git 修订版时情况并非如此。复制和详细信息npm.community/t/…
【参考方案1】:
我花了几个月的时间才发现npm ci
不是你的朋友,因为它会错过从 package.jsoninto
package-lock.json. Thus I think that the answer is
npm install --production` 同步更新的引擎。
所有的荣誉都应该去https://***.com/a/19824154/99834 详细解释它。为方便起见,我将提及最重要的部分:
npm install
将安装/更新 devDependencies,除非添加了 --production
标志
npm update
将忽略 devDependencies,除非添加了 --dev
标志
【讨论】:
【参考方案2】:正如 cmets 中的某人所提到的,有 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
目录,确认奇偶校验,然后在一切正常的情况下继续安装锁定的版本,但这需要一些时间,具体取决于数量包。
【讨论】:
以上是关于检查 NPM package.json 和 package-lock.json 是不是兼容的主要内容,如果未能解决你的问题,请参考以下文章
为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?