为什么“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 万条记录的所有距离所需的时间明显减少。 (计算)
  2. 以更短的时间下载 Linux(双层 DVD ISO)的完整安装。 (带宽)

我怀疑我的 packages.json 或我正在运行的命令 npm install 有问题。从图像中,似乎有无数次尝试检索相同的文件。可能有一种方法可以强制 npm 从更稳定的镜像中检索?它默认使用的镜像选择可能是不稳定的?只是一些建议——我不知道我问的具体原因。

这个问题也出现在我的 Linode、Digital Ocean 和 VULTR 盒子上——所以我怀疑它与 npm 是特定的,我使用的方式(缺少一些东西),或者我的 packages.json

原文由 Kraang Prime 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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

从评论中

AndreFigueiredo 说:

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


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

LINKIWI 表示:

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

观察

按照他们的建议,我注意到 CentOS、Ubuntu 和 Debian 在使用 apt b3be38c0a8bcb907e0899897ef 检索 当前 版本时都使用 非常 过时的版本 nodejsnpm yum (取决于操作系统主包管理器)。

摆脱过时的 nodejsnpm

为了尽可能减少头痛来解决这个问题,我运行了以下命令(在 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

来源 .bashrc

 source ~/.bashrc

使用nvm安装 nodejs 7.x

 nvm install 7

安装后,我对 npm 更快 的性能感到惊喜,它现在在抓取包时也显示了一个漂亮的进度条。

对于那些好奇的人, npm 的当前(截至目前)版本应该如下所示(如果不是,您可能需要更新它):

当前运行的 npm

概括

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

原文由 Kraang Prime 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

npm cache clean --force

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

Npm 缓存的官方文档可以在 这里 找到

原文由 Abdul Hameed 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题