为什么“npm install”真的很慢?

设置我的包裹时,我做错了什么? 有什么办法可以加速吗?

packages.json

{ "name": "testing node", "version": "0.0.0", "description": "", "main": "app.config.js", "dependencies": { "babel-core": "^6.17.0", "babel-loader": "^6.2.0", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-react-html-attrs": "^2.0.0", "babel-plugin-transform-class-properties": "^6.3.13", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-preset-es2015": "^6.3.13", "babel-preset-react": "^6.3.13", "babel-preset-stage-0": "^6.3.13", "react": "^0.14.6", "react-dom": "^0.14.6", "webpack": "^1.12.9", "webpack-dev-server": "^1.14.1", "mysql": "*" }, "devDependencies": {}, "scripts": { "dev": "webpack-dev-server --content-base src --inline --hot", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } 

如果我运行,当在文件夹内

 npm install 

我得到以下可能需要几小时完成设置:

npm安装卡住了

这不是一般的计算或硬件问题。 比较速度如下:

  1. 运行haversine来计算非索引mysql表中超过100万条logging的所有距离需要的时间显着减less。 (计算)

  2. 下载完整安装的Linux(双层DVD ISO)的时间要less得多。 (带宽)

我怀疑我的packages.json或者我运行npm install的命令有问题。 从图像看来,有很多尝试检索相同的文件。 可能有办法强制npm从一个更稳定的镜子检索? 可能它默认使用的镜像select是不可靠的? 只是一些build议 – 我不知道这是为什么我问的具体原因。

这个问题也发生在我的Linode,Digital Ocean和VULTR盒子上 – 所以我怀疑它是用npm ,我使用的方式(缺less的东西)或我的packages.json

我能够从评论部分解决这个问题; 概述下面的过程。

从评论

AndreFigueiredo表示:

我用npm v3.5.2和node v4.2.6在package.json中用不到1分钟的时间安装了模块。 我build议你更新节点和NPM。


v1.3.0甚至没有在v3上引入扁平化的依赖,解决了很多烦人的问题

LINKIWI表示:

一般来说,不要依赖软件包pipe理员喜欢维护最新的软件。 我强烈build议清除你从apt安装的node / npm组合,并按照nodejs.org上的说明安装最新版本。

意见

根据他们的build议,我注意到当CentOS,Ubuntu和Debian使用aptyum (取决于操作系统主包pipe理器)检索当前版本时,都使用非常过时的nodejsnpm版本。

摆脱过时的nodejsnpm

为了尽可能减less头痛,我运行了下面的命令(在Ubuntu上):

 apt-get purge --auto-remove nodejs npm 

这清除了古老的nodejsnpm系统以及不再需要的所有依赖关系

安装当前的nodejs和兼容的npm

接下来的目标是获得当前版本的nodejsnpm ,我可以直接从这里 nodejs ,然后编译或者使用这个二进制文件,但是这样做并不容易根据需要交换版本(取决于项目的年龄)。

我遇到了一个叫做nvm的软件包, 到目前为止 ,它似乎很好地处理了这个任务。 要安装nodejs版本7的当前稳定的最新版本:

安装nvm

 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash 

使用nvm安装nodejs 7.x nvm install 7

安装之后,我惊喜地发现npm性能要快得多 ,现在它也显示了一个漂亮的进度条。

对于那些好奇的人来说,目前(截止到这个date)的npm版本应该如下所示(如果不是这样,你可能需要更新它):

当前npm运行

概要

不要使用你的操作系统包pipe理器来安装NODE.JS或NPM – 你会得到非常糟糕的结果,因为看起来OS没有保持这些包(甚至不接近)。 如果您发现npm 运行缓慢 ,并且不是您的计算机或互联网,最有可能是因为严重过时的版本。

问题 :如果不保持最新状态,则NPM效果不佳。 不过,过去的版本已经为我打破了。

解决scheme :正如Kraang所说,使用节点版本pipe理器nvm ,并带有–lts标志

安装它:

 curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash 

然后经常使用它来升级到NPM的最新“长期支持”版本:

 nvm install --lts 

需要注意的是 :当你得到一个新的npm版本时,你可能不得不重新安装所有的软件包。

我注意到的一件事是,如果你在新项目(文件夹)中工作,你必须重新configuration特定path的代理设置

  1. Cd(更改terminal窗口path到目标文件夹。

  2. npmconfiguration设置代理http://(ip地址):(端口)

  3. npm config set https-proxy http://(ip address):(端口)

  4. npm install -g @ angular / cli