【问题标题】:NPM has stopped working on Windows 7 64bit, hangs on install/updateNPM 已停止在 Windows 7 64 位上运行,挂起安装/更新
【发布时间】:2015-07-05 14:08:09
【问题描述】:

在某些时候,我的 NPM 版本停止工作。几周前,当我尝试更新 npm(从 1.4 与 node 一起发布到现代 2.x 版本)时,似乎已经发生了这种情况,并且情况越来越糟。我必须更改环境变量以在我的节点目录之前指向我的 npm 目录(以获取新版本的 npm),此时一切都停止了工作。我将环境变量切换回来,然后更新就会挂起。但奇怪的是,当我尝试调试它并在命令中添加 --verbose 时,更新大部分时间都会起作用。有时他们挂在

npm http GET https://registry.npmjs.org/PACKAGE_NAME

但他们大部分时间都在工作。现在,旧版本的 NPM (1.4.1) 和我安装的新版本 (2.1.17) 都会发生这种情况,GET 命令总是失败(通常但不总是第一个命令)。我已经清除缓存,我已经清除了临时目录,我尝试清除 %APPDATA/roaming/npm/,然后重新安装所有内容。我没有代理,但我已经运行了:

 npm config set proxy

将代理设置为空白。我已将注册表设置为 http(而不是 https)并将 strict-ssl 设置为 false。我已经卸载并重新安装了nodejs,但没有运气。我尝试从管理员 cmd 提示符而不是普通命令提示符运行命令,但均无济于事。我的想法已经用完了,真的需要 NPM 才能工作......

以下是清除 %APPDATA/roaming/npm 目录后尝试安装 grunt-cli 的输出:

C:\Users\Kris Erickson>npm install -g grunt-cli --verbose
npm info it worked if it ends with ok
npm verb cli [ 'C:\\Program Files\\nodejs\\\\node.exe',
npm verb cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
npm verb cli   'install',
npm verb cli   '-g',
npm verb cli   'grunt-cli',
npm verb cli   '--verbose' ]
npm info using npm@1.4.28
npm info using node@v0.10.35
npm verb node symlink C:\Program Files\nodejs\\node.exe
npm verb cache add [ 'grunt-cli', null ]
npm verb cache add name=undefined spec="grunt-cli" args=["grunt-cli",null]
npm verb parsed url { protocol: null,
npm verb parsed url   slashes: null,
npm verb parsed url   auth: null,
npm verb parsed url   host: null,
npm verb parsed url   port: null,
npm verb parsed url   hostname: null,
npm verb parsed url   hash: null,
npm verb parsed url   search: null,
npm verb parsed url   query: null,
npm verb parsed url   pathname: 'grunt-cli',
npm verb parsed url   path: 'grunt-cli',
npm verb parsed url   href: 'grunt-cli' }
npm verb lock grunt-cli C:\Users\Kris Erickson\AppData\Roaming\npm-cache\671ef8ac-grunt-cli.lock
npm verb addNamed [ 'grunt-cli', '' ]
npm verb addNamed [ null, '*' ]
npm verb lock grunt-cli@ C:\Users\Kris Erickson\AppData\Roaming\npm-cache\d63f3d0b-grunt-cli.lock
npm verb request where is /grunt-cli
npm verb request registry https://registry.npmjs.org/
npm verb request id dc44ca4b260df8c3
npm verb url raw /grunt-cli
npm verb url resolving [ 'https://registry.npmjs.org/', './grunt-cli' ]
npm verb url resolved https://registry.npmjs.org/grunt-cli
npm verb request where is https://registry.npmjs.org/grunt-cli
npm info trying registry request attempt 1 at 13:36:28
npm http GET https://registry.npmjs.org/grunt-cli
/

注意:微调器永远不会停止(至少我已经离开了 10 分钟,但什么也没发生)。

【问题讨论】:

  • FWIW 您可以通过执行npm config set spin falsenpm config set loglevel http 来禁用微调器并重新启用输出。现在我总是在安装节点后这样做,因为它可以帮助解决此类问题,并且您可以判断是否确实发生了某些事情。

标签: windows node.js npm


【解决方案1】:

您可能已经安装了一个新的npm,但实际上并没有使用它(或者您是否恢复到 1.4.28?)

无论哪种情况,请尝试按照https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows 此处的说明在 Windows 上更新到最新的npm。目前最新的是 2.4.1。我建议使用选项 3。

然后尝试以最详细的方式运行npm install 命令:

npm -ddd install -g grunt-cli

并在此处将您的日志文件作为要点 https://gist.github.com 或作为新问题上传至 https://github.com/npm/npm/issues,我们将帮助您解决此问题。

【讨论】:

  • 我确实安装并切换到新的 NPM,然后切换回来(通过更改环境变量)。我确实安装了 git 和 cygwin,并且发现这会导致许多移植到 Windows 的 unix 工具出现问题,尤其是那些处理 SSH 的工具(例如,Vagrant 认为该盒子是一个 unix 变体,并且由于冲突而没有运行 GIT bash 或 cygwin bash环境变量)。但我会采纳你的建议并发布到 github 问题。
【解决方案2】:

您使用的版本号不符合semantic versionning 约定npm 使用:您需要指定MAJOR.MINOR.PATCH 版本号。

您可以:

  1. 使用0.2.x 表示法指定您不关心您使用的补丁版本,只要major.minor 匹配即可
  2. 使用~0.2.0 表示法指定您不关心您使用的补丁版本,只要major.minor 匹配即可
  3. 阅读npm's documentationsemver's documentation 了解其他可能性...

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我在 Windows 8.1 中运行节点。这个问题出现在一台新机器上,我搜索了几个小时没有成功的解决方案。最后。在绝望中,我使用 fiddler 试图查看 npm 正在发出什么调用,并且神奇地问题消失了。

    经过进一步调查,我发现 npm 似乎需要设置两个 windows 环境变量:

    在运行 npm 之前在命令提示符中尝试以下操作(注意:如果您实际上在代理后面,则将空引号替换为您的代理地址):

    Setx http_proxy ""
    Setx https_proxy ""
    

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 2014-04-19
      • 2013-08-10
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多