当前位置: 首页 > 知识库问答 >
问题:

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

颛孙炜
2023-03-14

有没有办法检查一个package-lock.json文件是否与package.json兼容,而不运行npm安装?兼容意味着指定的版本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 installnpmci仅引用package lock.json,因此如果开发人员不更新锁文件,持续集成设置将与他们期望的不匹配。

共有2个答案

韦高阳
2023-03-14

我花了几个月的时间才发现,npmci不是你的朋友,因为它将无法将更新的引擎从package.json同步到package lock.json。因此,我认为答案是npm安装——生产`

所有的荣誉都应该归他所有https://stackoverflow.com/a/19824154/99834 这就详细地解释了。为了方便起见,我将提到最重要的几点:

  • npm安装将安装/更新devDependence,除非添加了-生产标志
  • npm更新将忽略devDependence除非--dev标志被添加
寇丰
2023-03-14

正如评论中提到的,有一个npm ci命令,如果package.jsonpackage-lock.json同步,该命令将抛出一个错误。

以下是我用来“测试”他们是否平等的方法:

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

我正在寻找一种更好的方法来实现这一点,因为这实际上会删除整个node\u modules目录,确认奇偶校验,然后继续安装锁定的版本(如果一切正常),但这需要一些时间,具体取决于软件包的数量。

 类似资料:
  • npm@5已经发布,它有一个新的功能文件(在之后),这让我很困惑。我想知道,这个文件有什么效果?

  • 问题内容: 要锁定项目上安装的依赖项的版本,该命令将创建一个名为的文件。这是从Node.js v8.0.0和npm v5.0.0开始的 ,您可能已经知道了。 尽管有Node.js和npm关于提交此文件的建议,但是关于何时应避免这样做的一些担忧也是一个选择。通常,我们致力于项目,但这是一个奇特的问题。 虽然我们默认情况下应该提交文件,但是我们有一个特定的情况,我们不应该提交。例如,如果我们要测试项目

  • 问题内容: npm 5已于今天发布 ,其中一项新功能包括通过创建文件进行确定性安装。 该文件应该保留在源代码管理中吗? 我假设它类似于和,这两个都应该保留在源代码管理中。 问题答案: 是的,旨在被检查到源代码管理中。如果您使用的是npm 5,则可能会在命令行上看到:根据: 会为npm修改树或的任何操作自动生成。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。 该文件旨

  • 所以,我有这个包裹,在package-lock.json里面: 该漏洞是:“大括号”:“^1.8.2”,当我运行npm audit时,它表示已修复为2.3。1,但我似乎无法更新它,或者只是不知道如何更新。 我尝试过的事情: npm安装micromatch和支架,然后进行npm审计修复 npm安装 从npm依赖关系中,可能有一些事情我不理解。那么我该如何解决这个问题呢? 为软件包编辑。json

  • QSTN:当它是叶节点时,为什么需要初始化ls=0或rs=0。考虑链接中给出的树,如果我们到达节点4,如果(node==NULL isLeaf(node))返回1;上面的代码将1(true)返回到调用它的函数,即节点10,类似地,右侧将true返回到节点10,因此我们现在可以进入下面的循环,因为如果(isSumTree(node->left)&&isSumTree(node->left)&&isS

  • 我错过了什么?如何让npm真正尊重我的锁文件?