npm install 每次都很慢

npm install is really slow every time

当运行 npm install --no-optional时,每次大约需要3分钟才能完成。它安装了大约 200MB 的文件。我想加快构建过程,但我找不到任何真正加快速度的方法。

默认情况下 npm install 不是默认缓存依赖项(就像任何其他像样的工具一样,例如 mavensbtnuget)吗?如果是的话,它不应该比那快得多吗?如果不是,那么为什么以及如何解决这个问题?

我找到了 npm-cache 包,但它似乎 .tar 所有的依赖项,当它们都没有改变时,npm-cache 将重用 tar 文件。这样做的缺点是,每当依赖项发生微小变化时,它将无法重用缓存(据我了解)。

是否有关于为什么这很慢、如何加快速度以及缓存通常如何与 npm 一起工作的好资源?我用过的其他工具(sbtmavennuget)要快得多,因此我对 npm 的期望也很高。

我研究的另一个选项是 npm install -g,但它似乎没有解决任何问题,因为它 meant to be used for installing some cli tools 像 grunt、npm-cache 等,因为它将它们添加到路径。所以这肯定不能解决问题。

npm -v: 4.0.5
node -v: 6.8.1

node 的问题是来自 sbt 背景,其中 sbt 使用本地 ivy 缓存来缓存依赖项,我希望 Node 有相同的行为。所以至少在 V 5.0 之前,Node 没有适当的依赖缓存机制,所以你基本上需要在每次执行 node install 时重新下载所有依赖一个干净的 node_modules 文件夹。

开发了一些工具来解决这个问题,但 none 令人满意。

但这似乎已在 Node V 5.0 中通过一些缓存策略得到修复,因此如果您遇到类似问题,请查看第 5 个版本。

最好使用以下命令安装 pnpm 包:

npm i -g pnpm

pnpm 使用 hard links 和 symlinks 在磁盘上只保存一个版本的模块一次。例如,当使用 npm 或 Yarn 时,如果您有 100 个项目使用相同版本的 lodash,则磁盘上将有 100 个 lodash 副本。使用 pnpm,lodash 将保存在磁盘上的一个单独位置,并且硬盘 link 会将其放入应该安装的 node_modules 中。

作为一个例子,我可以提到,每当你想安装 package.json 文件的依赖项时,你应该做的只是输入 pnpm i,它会自行处理其他事情。它的速度比 npm 更快,因为它会重用你之前安装的依赖项!