`npm install` 和 `npm audit` counts 的区别是什么?

6

最近增加了npm audit(用于审核依赖项)后,我注意到在node_modules中安装的软件包数量和npm审查的数量存在巨大差异。以下是一个示例:

npm install output

以下是我的问题:

  • 我正确地理解281是已安装的软件包总数吗?
  • 为什么npm要审核比项目中更多的软件包?

如果npm发现漏洞,那么它可能需要回去审核其他软件包的版本,这可以理解。但在这种情况下,它发现了0个漏洞,为什么还会有额外的工作呢?

更新:

关于顶级依赖和子依赖之间的区别,我认为有一些混淆。运行以下命令以重现类似的差异:

mkdir test-npm-count-discrepancy
cd test-npm-count-discrepancy
npm init
npm i standard-version

请注意,目前(撰写本文时),已添加了200多个依赖项(即standard-version及其所有子依赖项),但审核的包超过1000个。再次强调,上面的主要问题是“为什么npm审核的包比实际安装的还要多?”

npm 不是检查嵌套包吗? - Zooly
这里的“281”是顶级和嵌套包的数量(我想)。我的实际package.json中列出的依赖项不到10个。 - Greg Venech
考虑到 281 是您在执行 npm ls --depth=0 命令时本地模块的数量,而执行 npm ls 命令将显示与这些模块一起自动安装的嵌套模块列表。 - Raktim Biswas
1
@RaktimBiswas 不是 "npm ls --depth=0" 只会列出我 8 个明确安装的包。如果计算 "deduped" 行,则 "npm ls" 列出的恰好是 281 个。我 99% 确信我的第一个问��的答案是 "是的,281 是总数(顶级和嵌套)。与 "audit" 所查看的内容和本地安装的内容不同,肯定存在差异。 - Greg Venech
1个回答

1
对于第一个问题: - 社区如果没有提供类似依赖列表或package.json的链接,就无法确定。但是,如果您的包文件只有几个依赖项,那么大多数情况下仍然是正常的。您可能已经安装了12个依赖项,但NPM会自动为应用程序的依赖项安装大部分甚至全部的依赖项。这有助于加快您的工作流程。
对于第二个问题: - 如我对第一个问题的回答所述,它会审核您安装的依赖项以及自动安装的依赖项,以确保您安装的依赖项能够正常工作。
对于第三个问题: - 它始终检查开发人员标记的漏洞,以便您可以拥有最新版本,这通常是最不容易出错、最功能齐全和最安全的版本。
编辑: npm install的整个目的是更新当前的依赖项并将新的依赖项安装到目录中。而npm audit的目的是检查是否有标记为修复安全问题的更新的依赖项。
编辑2: 我认为我明白了:它可能会审核生产环境中安装的依赖项、您的依赖项和dev-dependencies,以警告您其中一个依赖项是由开发人员不安全地构建的。

1
感谢您的回答,但请查看上面的评论。这绝对不是嵌套与顶级依赖项的问题。我理解您需要一个示例,虽然我无法分享屏幕截图中的存储库,但我可以分享一些最小的“npm”命令来重现差异。 - Greg Venech
@SkipJack,是的,我知道你说的不能共享包文件的意思。然而,审核应该查看从包中安装的所有内容以及使用这些依赖项安装的内容,以便它们可以正常工作等等。但“npm install”的整个目的是更新当前依赖项并将新依赖项安装到目录中。“npm audit”的目的是检查标记有更新以修复安全问题的依赖项。 - user8699261
2
运行 npm audit --production 命令,查看数字是否降回到 281。 - DylanYoung
1
更新:我试过了,它只删除了大约4000个中的100个,所以那不是答案。去重后的ls返回387(对于“--production”为367)。有趣的是,审核的数量似乎比这些情况下安装的数量高一个数量级。我想知道这是否可能是一个提示。也许它所做的是检查当前安装的版本,然后递归下降所有可用版本以找到“未修复”的漏洞?那就是我的猜测。 - DylanYoung
2
我正在寻找有关与OP提到的相同差异的一些信息。当我在我的SharePoint Framework(SPFx)项目中进行npm安装时,我想添加到这个讨论中的是:从1212个贡献者中添加了2184个软件包,并在57.953秒内审核了584933个软件包。在我的情况下,它审核了250倍的已安装软件包数量...我想知道审核软件包的数量是否正确。要在几秒钟内实际审核这么多软件包需要大量时间(它只花了几秒钟)。 - Mark van Dijk
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接