npm install在node_modules / .staging中有几十个版本的相同软件包

时间:2016-12-06 02:52:40

标签: node.js npm

我正在开发一个使用NPM进行依赖关系管理的Webpack,TypeScript和Angular 1.5.x Web应用程序。该应用程序有大约3个依赖项和package.json中列出的类似数量的devDependencies。许多依赖项是在Artifactory上托管的内部开发的NPM包。

Jenkins的npm install 非常慢(有时约为1小时)。我注意到以下几点:

npm install期间,.staging下创建node_modules目录。这里列出了大约12个不同版本的相同依赖项。我假设我们的每个依赖项都指定了这些依赖项的略有不同的版本,NPM会下载它们以解决它们。例如

$ ls -al node_modules/.staging/webpack-*

webpack-02c2cd2d/ webpack-core-0e45f015/ webpack-dev-middleware-1b9e08da/     
# ...many more versions of webpack, wepack-core, webpack-dev-middleware

.staging目录本身包含千个目录:

$ ls -al node_modules/.staging/ | wc -l
19406

我的问题如下:

  1. .staging目录是什么?什么是npm用它做什么?这个问题是asked as an issue on Github但从未得到妥善回答。
  2. 为什么npm install这么慢?为什么要下载每个依赖项的这么多不同版本?
  3. 关于缓慢和明显的重复下载,我该怎么办? (除了在Github问题上建议的解决方案,即增加掉期)

1 个答案:

答案 0 :(得分:0)

以下是发生的事情:

我们的内部包裹被收缩包裹。已使用npm-shrinkwrap.json标志生成每个包的--dev文件。这意味着开发依赖关系也会被收缩包装。

有两种可能的解决方案:

  1. 不要使用--dev标志生成shrinkwrap JSON
  2. 运行npm install --only=prod。这应该是根据this answer
  3. 跳过安装devDependencies
相关问题