node_modules文件夹过大

25

我使用Gulp已经有一段时间了,不知道是一开始就没有注意到它占用这么多空间,还是它的大小一直在增长。

我只用它进行非常普通的前端工作。例如,这是我的gulpfile.js中的请求部分:

var gulp         = require('gulp'),
    autoprefixer = require('gulp-autoprefixer'),
    browserSync  = require('browser-sync'),
    concat       = require('gulp-concat'),
    copy         = require('gulp-copy'),
    del          = require('del'),
    htmlmin      = require('gulp-htmlmin'),
    merge        = require('merge-stream'),
    streamqueue  = require('streamqueue'),
    cleancss     = require('gulp-clean-css'),
    gulpif       = require('gulp-if'),
    newer        = require('gulp-newer'),
    imgmin       = require('gulp-imagemin'),
    plumber      = require('gulp-plumber'),
    postcss      = require('gulp-postcss'),
    order        = require('gulp-order'),
    rename       = require('gulp-rename'),
    runSequence  = require('run-sequence'),
    sass         = require('gulp-sass'),
    sourcemaps   = require('gulp-sourcemaps'),
    uglify       = require('gulp-uglify'),
    uncss        = require('gulp-uncss');

现在,根据du -sh的输出,node_modules的大小为2.2GB,我认为这太大了。我想深入了解一下它的情况,所以查看了所有的根模块:

DaisyDisk查看普通的node_modules/文件夹


我可能有点天真,但我只是期望一些JavaScript功能,我不明白这些模块,特别是前面几个为什么会这么大。

这就是Gulp的设计吗?我做错了吗?我能不能改进它(除了不使用它们)?


3
看这个。这是一个网站,可以显示你的依赖项有多少其他依赖项。uncss非常庞大,因为它有很多其他依赖项。http://npm.anvaka.com/#/view/2d/uncss - spoonscen
不好意思,我有一个非常基本的建议,你尝试过删除 node_modules 并再次运行 npm i 吗?有时候当你只是运行 npm i 而没有使用 --save 选项时,会留下一些垃圾文件,它们不会被添加到 package.json 中,有时候你甚至从未使用这些包。 - revelt
11
当然可以。实际上,在每个项目中我都必须运行 npm i。以 uncss 为例,它占用了 242MB 的空间。想想在这么多空间中有多少行 JavaScript 代码。某些地方似乎不对劲。 - Neithan Max
5
每个人都应该在业余时间至少略微查看一下他们的node_modules。那里面有一些不该存在的奇怪东西,例如未使用的dist/目录下含有已压缩或未压缩文件,多个副本(x64和x86)的.exe文件,这些文件无论如何也无法在您的系统上运行,还有使用庞大库仅仅借用其stripIndents函数的包...这是“我只会使用几个依赖项...”重复了数百次的集大成。呈指数增长。 - RaisinBranCrunch
2
我们都同意这一点吗?这是一个繁琐的手动实验性切除过程(意味着永远不会完成),还是有工具可以使这更容易? - Parapluie
显示剩余2条评论
1个回答

5

我可以想到一些方法:

  1. 这更多是关于您的 package.json,如果您能进行优化,则是一个很好的选择:

    • 将软件包分为 devDependencies 和 dependencies 两部分,有助于在生产模式下(使用 –production 标志运行 npm install)减少 node_modules 的大小。
    • 用体积较小或依赖较少的库替换一些占用空间大或依赖较多的库。
  2. 使用 node-prunemodclean 或其他类似的软件包,从 node_modules 中删除不必要的文件。


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