如何计算已安装软件包的数量,包括依赖项

kmi*_*las 7 dependencies count package npm

是否有一种简单的方法来获取应用程序全局和本地安装的npm软件包的数量?

例如,在运行create-react-app[1]之后,当我输入npm ls命令时,屏幕上会充满所有安装的软件包和依赖项。

如何查找所述软件包和依赖项的数量(“基数”)使我难以理解。Tyvm,基思:^)

参考文献:

  1. https://github.com/facebook/create-react-app

小智 10

尝试:

npm ls --parseable | wc -l
Run Code Online (Sandbox Code Playgroud)


Vla*_*aev 7

In order to count unique dependencies you should exclude deduped packages:

npm ls | sed '/deduped$/d' | wc -l
Run Code Online (Sandbox Code Playgroud)


Ski*_*ack 4

在最新版本的 中npm,它应该列出运行后安装/添加的软件包数量npm install(或npm i):

npm 安装输出

在这种情况下,我正在工作的项目只有几个顶级dependencies,并devDependencies在 中列出,package.json但是281添加的所有包的实际计数。我发布了一个单独的问题,希望获得有关审计计数差异的更多信息。

因此,我认为上面列出的是获取特定项目计数的最简单方法。不过,让我们进一步分解你的问题......

计算一个项目

参见上文(基本上删除您的node_modules目录并运行npm i)。

计算特定包裹

OP 的问题涉及到这一点create-react-app。那么如果我想查看 的包裹总数怎么办create-react-app

  1. 从新目录开始。
  2. 跑步npm i create-react-app
  3. 查看输出...

在新目录中创建react-app

你问为什么要创建一个新目录?因为现有项目可能已经安装了一些create-react-app依赖项,从而导致added计数不同:

在现有项目中创建-react-app

计算全球包裹数量

我对此还没有一个很好的答案(但如果我们遇到一个答案,我很高兴更新答案)。因为全局安装 ( npm i -g ...) 不存储在 global 中package.json,所以我认为您不能npm i -g单独运行来获取计数。似乎一种方法可能是按照OP提到的那样做,这意味着......

  1. 跑步npm ls
  2. 将输出复制到文本编辑器中并进行行计数。

我确信某些 bash 向导可以通过将 的输出传送npm ls到另一个或两个 CLI 命令来自动执行此操作,例如 ( npm ls | count-lines)。

但这里要注意的一件事是,我不能100% 确定行数是包数的一对一映射。我似乎记得一些实例,其中包下npmlist一个依赖项,但然后在它旁边加上括号,表明它只安装了一次(但列出了多次),是符号链接的,等等。所以再说一次,还不确定全局变量的一个很好的解决方案。

更新:

npm ls将列出某些依赖项,deduped如下所示:

loud-rejection@1.6.0 deduped
Run Code Online (Sandbox Code Playgroud)

因此npm ls,直线计数并不是一种完美的方法,除非您删除deduped行并考虑像这样的其他标志。