为什么" npm安装"真的很慢?

时间:2017-01-07 18:21:55

标签: node.js

设置包裹时我做错了什么?有什么方法可以加快速度吗?

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 install stuck

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

  1. 运行haversine计算非索引mysql表中超过100万条记录的所有距离所花费的时间要少得多。 (计算)

  2. 在极短的时间内下载Linux(双层DVD ISO)的完整安装。 (带宽)

  3. 我怀疑我的packages.json或我正在运行的命令npm install出了问题。从图像中,似乎有许多尝试来检索相同的文件。可能有办法迫使npm从更稳定的镜子中检索?可能它默认使用的镜像选择是不是很难?只是一些建议 - 我不知道具体的原因,这就是我要问的原因。

    我的Linode,Digital Ocean和VULTR盒子上也会出现这个问题 - 所以我怀疑它是npm特有的东西,我使用的方式(缺少的东西)或我的packages.json

13 个答案:

答案 0 :(得分:22)

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

来自评论

AndreFigueiredo声明:

  

我使用你的package.json和npm v3.5.2以及node v4.2.6在不到1分钟的时间里安装了模块。我建议你更新node和npm。

  

v1.3.0甚至没有在v3上引入平坦的依赖关系来解决许多恼人的问题

LINKIWI声明:

  

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

观察

根据他们的建议,我注意到在检索当前非常过时版本的nodejsnpm >使用aptyum的版本(取决于操作系统主程序包管理器)。

摆脱过时的nodejsnpm

为了解决这个问题,尽可能减少头痛,我运行了以下命令(在Ubuntu上):

apt-get purge --auto-remove nodejs npm

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

安装当前nodejs和兼容的npm

下一个目标是获取nodejsnpm的当前版本,我可以直接从here获取nodejs并编译或使用二进制文件,但是这不会让我根据需要轻松交换版本(取决于项目的年龄)。

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

安装nvm

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

来源.bashrc

source ~/.bashrc

使用nvm安装nodejs 7.x

nvm install 7

安装完成后,我对npm快得多的性能感到惊喜,现在它还显示了一个非常好的进度条,同时还在阻止包裹。

对于那些好奇的人来说,npm的当前版本(截至此日期)应该如下所示(如果它没有,你可能需要更新它):

current npm running

摘要

不要使用您的操作系统包管理器来安装NODE.JS或NPM - 您将得到非常糟糕的结果,因为似乎没有操作系统保持这些包(甚至不接近)当前。如果您发现npm 运行缓慢并且它不是您的计算机或互联网,则很可能是因为严重过时的版本。< / p>

答案 1 :(得分:4)

我正在使用Linux,并且拥有nvm并可以使用7个以上版本的节点 根据我的经验,我在最新的项目中遇到过相同的情况(实际上不是几个小时,而是几分钟,因为每小时的项目我不能等上几个小时:))

免责声明:在您了解缓存清理的工作原理之前,请不要尝试以下选项

npm cache clean --force

然后对我来说一切正常,所以看起来npm的缓存有时会与不同版本的Node混淆。

可以找到Npm缓存的官方文档 here

答案 2 :(得分:1)

问题:如果您不及时更新,NPM效果不佳。  然而,过去,我已经打破了最新版本。

解决方案:正如Kraang所提到的,使用节点版本管理器nvm及其--lts标志

安装它:

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

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

nvm install --lts

大警告:当您获得新的npm版本时,您可能需要重新安装所有软件包。

答案 3 :(得分:1)

我从您的屏幕截图中看到您正在Windows上使用WSL。而且,Windows附带了病毒扫描程序,而病毒扫描会使NPM安装非常慢!

在安装过程中添加免除项或禁用病毒扫描可以大大加快其运行速度,但是鉴于存在恶意NPM软件包的可能性,这可能是不可取的

一个链接建议三倍的安装时间https://ikriv.com/blog/?p=2174

虽然我自己还没有进行广泛的介绍

答案 4 :(得分:1)

安装 nvm 并尝试它应该会有所帮助,使用以下命令:-

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

答案 5 :(得分:0)

我遇到了同样的问题,我在nodejs version: 8.9.4npm version: 5.6.0。 我在网上尝试了很多解决方案,包括这篇文章的解决方案,没有一个对我有用,然后我找到了解决问题的yarn package manager,所以如果一切都失败了,我想&#34; yarn&#34;值得一试。

答案 6 :(得分:0)

我在Debian上遇到了同样的问题,毛线是我的解决方案。

答案 7 :(得分:0)

我遇到了这个问题,因此SO中的解决方案都没有帮助。我想通了,因此我将其发布在这里,以防其他人遇到类似的问题。

我试图在亚马逊实例上运行npm i。问题最终是由于linux仅打开一定数量的端口,而当我运行npm时,它打开的速度超过一千,连接到注册表以下载所有软件包。这样就可以了,但是只需冻结15分钟即可。然后将发生超时,并最终将其移至另一个端口。因此,在AWS的安全组中,我添加了一个规则,即仅将TCP设置为0.0.0.0/0的所有TCP,让npm打开任意数量的出站连接并对其进行修复。

答案 8 :(得分:0)

此链接帮助我boost npm installs。 强制npm在https上使用http并禁用进度显示。

答案 9 :(得分:0)

我有类似的问题。我对某些解决方案感到困惑,使我无法为不同的用户显示不同的版本。 如果您有任何问题,我会先检查您使用节点的任何实现的每个帐户

最后,此解决方案似乎可以100%解决此问题,这使我确信我的版本是通用的,无论我想使用什么用户权限:

    sudo yum update

    sudo yum install build-essential checkinstall libssl-dev

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

    (sudo) nvm --version

    (sudo) nvm ls-remote

    (sudo) nvm install [version.number] 

1

如果仍然有问题,请尝试在/ usr / local / bin目录中查找。如果找到名为node的大型二进制文档或名为npm的文件夹,请将其删除。

    rm /usr/local/bin/node

    rm -r /usr/local/bin/npm

就我个人而言,在删除这些帐户之前,我的两个用户帐户使用的是通过nvm正确安装的最新版本的node / npm,而我的第三个帐户显然仍然仍然使用较旧的node和npm安装,因此仍然很顽固位于我的/ usr / local / bin /目录中。一旦使用上述两个命令删除了这两个帐户,该有问题的用户帐户就会隐式开始运行正确的安装,并使所有三个帐户互为预期的版本。

(使用Centos 7 Blank x64时实现。上面使用的某些源代码最初是由“ phoenixNAP全球IT服务” 1提供的)

答案 10 :(得分:0)

我们也遇到过类似的问题(我们在公司代理后面)。至少在我们的詹金斯版本上更改为yarn会有很大的不同。

“ npm install”和“ yarn install”的结果之间有一些细微的差别-但是没有什么伤害我们的。

答案 11 :(得分:0)

加快npm安装速度的一种简单解决方案是在AWS上启动一台功能强大的计算机,并使用它编译您的项目并将代码发回给您。

我正在对其进行试验,发现运行npm install的时间大大减少了。我找到了可以轻松执行上述命令的工具https://stormyapp.com

答案 12 :(得分:-3)

我注意到的一件事是,如果您在新项目(文件夹)中工作,则必须为特定路径重新配置代理设置

  1. Cd(将终端窗口路径更改为目标文件夹。

  2. npm config set proxy http://(ip address):( port)

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

  4. npm install -g @ angular / cli