You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩减npm的node_modules体积?能否复用统一的node_modules?

解决node_modules重复占用磁盘空间的实用方案

绝对有办法解决这个痛点!作为常年和前端项目打交道的开发者,我试过好几种靠谱的方案,下面分享几个最实用的:

1. 用pnpm替代npm(最推荐)

pnpm的核心优势就是依赖共享存储,它会把所有项目的依赖统一存在一个全局的存储目录(默认在~/.pnpm-store),每个项目的node_modules里的文件都是指向这个全局存储的硬链接或符号链接,而非复制完整的依赖文件。

操作起来超简单:

  • 先全局安装pnpm:npm install -g pnpm
  • 之后在项目里用pnpm install代替npm install

这样每个项目的node_modules体积会骤减(比如原来200MB的可能变成几MB),而且相同版本的依赖只存一份,新项目安装速度也会快很多。我自己维护五六个前端项目,用pnpm后磁盘占用直接从2G多降到了300MB左右,亲测有效。

2. 使用npm Workspaces(适合多项目的Monorepo场景)

如果你的多个项目都是自己维护的,可以把它们整理成Monorepo结构,用npm的Workspaces功能共享同一个根目录下的node_modules。

举个典型的目录结构:

my-monorepo/
├── package.json
├── project-a/
│   └── package.json
└── project-b/
    └── package.json

在根目录的package.json里配置Workspaces:

{
  "workspaces": [
    "project-a",
    "project-b"
  ]
}

然后在根目录执行npm install,所有子项目的依赖都会被安装到根目录的node_modules里,子项目无需单独安装依赖,也不会生成自己的node_modules(或仅包含少量本地符号链接)。

这个方案适合团队协作或自己维护多个关联项目的情况,既能统一管理依赖版本,又能大幅节省磁盘空间。

3. Yarn Berry(Yarn 2+)的依赖优化机制

Yarn的新版本(Berry)也提供了类似的空间优化,比如它的Plug'n'Play (PnP) 模式,完全不需要生成node_modules,直接通过缓存的依赖文件运行项目;同时它也支持全局缓存,不同项目共享相同版本的依赖。

不过Yarn Berry的配置和兼容性需要花点时间适应,如果已经习惯npm生态,pnpm的迁移成本会更低。

4. 临时救急:只保留生产依赖

如果只是想临时缩减单个项目的体积,可以在项目完成后执行:
npm prune --production
这个命令会删除所有开发依赖(比如babel、eslint这类仅在开发阶段用到的包),只保留生产环境必需的依赖,能减少一部分体积。但注意这是临时方案,之后如果还要继续开发项目,可能需要重新安装开发依赖。

小提醒

  • 不管用哪种共享方案,依赖版本一致是关键:不同项目如果依赖版本不同,还是会存储不同的版本,但相同版本的依赖只会存一份,依然能省大量空间。
  • pnpm和Yarn Berry都兼容npm的package.json和package-lock.json(pnpm会生成pnpm-lock.yaml),迁移成本极低。

内容的提问来源于stack exchange,提问作者laptopapik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:44:06