我如何查看npm软件包的大小?


129

在NPM上搜索软件包时,我想查看软件包大小(以KB或MB等为单位)。NPM似乎没有显示此信息。

如何确定NPM程序包会增加多少膨胀?


劫持此对话是因为我想指出一种有助于从您的计算机中获取可用空间的工具。显然node_modules在我的机器上占用了atm 21bg;npkill可以帮助您做到这一点![在此处输入图片描述 ](i.stack.imgur.com/BKbyU.png
Ahmad Alfy

Answers:


181

您可能要衡量的是,如果要将软件包添加到应用程序捆绑包中,其影响。其他大多数答案仅会估计源文件的大小,由于内联注释,长变量名等原因,这可能不正确。

我制作了一个小实用程序,可以告诉您打包的包的最小+压缩大小-

https://bundlephobia.com


5
谢谢!这是一个非常不错的工具!
BaronVonKaneHoffen

3
美丽的用户界面!谢谢,这正是我一直在寻找的东西。但是,永久使用超大型包装。
世纪福音战士'17年

3
@Black应该备份
Shubham Kanodia

6
此链接:https://cost-of-modules.herokuapp.com现在指向https://bundlephobia.com 一个非常有用的工具btw。
亚当·韦伯

4
这非常酷,只需将其添加到每个软件包的npm页面即可
eddiemoya

69

看一下这个模块成本项目。这是一个npm软件包,其中将列出软件包的大小和子级数。

安装: npm install -g cost-of-modules

用法:cost-of-modules在您正在使用的目录中运行。

在此处输入图片说明


2
有点矫kill过正,它需要在计算之前重新安装所有模块。但是工作。
pdem '17

7
不要使用此程序包-它会创建一个名为nodemodules.bak的工件文件夹,该文件夹会产生难看的副作用
Nth.gol

22

我创建了一个工具npm download size,它检查给定npm软件包的tarball大小,包括依赖关系树中的所有tarball。这使您对预先添加依赖项的成本(安装时间,磁盘空间,运行时资源,安全审核等)有所了解。

webpack的下载大小

在上图中,Tarball大小是包的tar.gz,总大小是所有tarball的大小。该工具非常基本,但是可以做到。

一个命令行工具也可以。您可以这样安装它:

npm i -g download-size

并像这样使用它:

$ download-size request
request@2.83.0: 1.08 MiB

可以在Github上找到源代码:apicli工具Web客户端


20

我在今年年初创建了Package Phobia,希望将软件包的大小信息输入npmjs.com,并随着时间的推移跟踪软件包的膨胀。

https://packagephobia.com

img

此功能旨在在运行npm install诸如服务器端依赖express或的开发者依赖之后测量磁盘空间jest

您可以在以下自述文件中阅读有关此工具和其他类似工具的更多信息:https : //github.com/styfle/packagephobia


更新2020

npackjs.com网站上提供了“未压缩大小”(基本上是发布大小)以及“总计文件”。但是,这不是递归的,这意味着npm install可能会更大,因为单个软件包可能取决于许多软件包(因此,软件包恐惧症仍然很重要)。

对于该功能,还有一个待处理的RFC,可从CLI打印此信息。


很好,但是为什么其结果与恐惧症有如此大的不同呢?例如,比较lodash.lowerfirst
Danyal Aytekin

2
@DanyalAytekin因为他们正在衡量不同的事物。简短的回答:如果您正在寻找前端软件包,请使用BundlePhobia。如果您正在查看后端软件包,请使用PackagePhobia。如果您有兴趣,可以在自述文件中找到更多详细信息。
styfle

16

如果您将webpack用作模块捆绑器,请查看:

我绝对推荐第一个选择。它在交互式树图中显示大小。这可以帮助您在捆绑文件中查找软件包的大小。

Webpack捆绑分析器

这篇文章中的其他答案显示了项目的大小,但是您可能没有使用项目的所有部分,例如摇晃树木。然后,其他方法可能无法显示准确的尺寸。



4

如果使用Visual Studio Code,则可以使用名为Import Cost的扩展。

该扩展名将在编辑器中内联显示导入包的大小。该扩展程序利用带有babili-webpack-plugin的webpack来检测导入的大小。


也可用于WebStorm。
JoeTidee

此扩展名不适用于所有软件包。它显示“正在计算...”,然后即使
将超时值

2

您可以签出npm-module-stats。它是一个npm模块,无需安装或下载该模块即可获取npm模块的大小及其依赖项。

用法:

var stats = require("npm-module-stats");

stats.getStats("glob").then((stack) => {

  let dependencies = Object.keys(stack);
  let totalSize = dependencies.reduce((result, key, index) => {
    return result + stack[key].size;
  }, 0);

  console.log('Total Size in Bytes ', totalSize);
  console.log('Total Dependencies ', dependencies.length-1);

}).catch((err) => {
  console.error(err);
});

看起来有些冗长,但是可以解决您描述的问题。


1
二级部门呢?
沙里科夫·弗拉迪斯拉夫

2

一种“快速而肮脏”的方法是使用curl和wzrd.in快速下载缩小的软件包,然后grep文件大小:

curl -i https://wzrd.in/standalone/axios@latest | grep Content-Length

下载的内容已缩小,但没有压缩,但是当您比较两个或多个软件包时,可以很好地了解软件包的相对大小。


2
好吧,然后使用其他服务,例如unpkg.com。示例:curl -i https://unpkg.com/axios@0.16.1/dist/axios.min.js | grep Content-Length
thoragio '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.