【发布时间】:2018-07-19 05:24:29
【问题描述】:
我正在运行 Windows 10、NPM v5.5.1 和节点 v8.9.1。
编辑:我已经更新到 node v8.9.4 和 npm v5.6.0。问题没有改变。
大约 2 个月前,我在这台机器上设置了我的开发环境。我正在使用 Angular CLI 构建我的客户端应用程序。
一切都很顺利。我通过 NPM 添加了一些包没有问题,例如 Gulp 和 ngx-bootstrap。然后我开始在我的一些包安装中遇到错误。
错误是:
npm ERR! code PATH_LENGTH_EXCEEDED
npm ERR! errno PATH_LENGTH_EXCEEDED
npm ERR! request to https://registry/npmjs.org/{{package}} failed, reason: path length constraint exceeded
npm ERR! A complete log of this run can be found in:
npm ERR! {{npm_cache path}}\_logs\2018-02-08T14_43_40_856Z-debug.log
该日志文件的内容是:
0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'install',
1 verbose cli 'ngx-cookie-service',
1 verbose cli '--save' ]
2 info using npm@5.5.1
3 info using node@v8.9.1
4 verbose npm-session d55be12849534a0a
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly fetchPackageMetaData error for ngx-cookie-service@latest request to https://registry.npmjs.org/ngx-cookie-service failed, reason: path length constraint exceeded
8 verbose type system
9 verbose stack FetchError: request to https://registry.npmjs.org/ngx-cookie-service failed, reason: path length constraint exceeded
9 verbose stack at ClientRequest.req.on.err (C:\Program Files\nodejs\node_modules\npm\node_modules\pacote\node_modules\make-fetch-happen\node_modules\node-fetch-npm\src\index.js:68:14)
9 verbose stack at emitOne (events.js:116:13)
9 verbose stack at ClientRequest.emit (events.js:211:7)
9 verbose stack at TLSSocket.socketErrorListener (_http_client.js:387:9)
9 verbose stack at emitOne (events.js:116:13)
9 verbose stack at TLSSocket.emit (events.js:211:7)
9 verbose stack at emitErrorNT (internal/streams/destroy.js:64:8)
9 verbose stack at _combinedTickCallback (internal/process/next_tick.js:138:11)
9 verbose stack at process._tickCallback (internal/process/next_tick.js:180:9)
10 verbose cwd C:\Development\test
11 verbose Windows_NT 10.0.15063
12 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "ngx-cookie-service" "--save"
13 verbose node v8.9.1
14 verbose npm v5.5.1
15 error code PATH_LENGTH_EXCEEDED
16 error errno PATH_LENGTH_EXCEEDED
17 error request to https://registry.npmjs.org/ngx-cookie-service failed, reason: path length constraint exceeded
18 verbose exit [ 1, true ]
我对此进行了研究,发现了 Windows 10 文件路径 260 个字符的限制。我认为 npm 版本 3.1.0 应该已经解决了这个问题,但我决定按照this answer 中的说明进行操作,因为尽管使用了 NPM v5.5.1,我仍然遇到了这个问题。
我发现我的 Windows 版本在推出可让您禁用此限制的功能之前。我更新到版本 1703(OS Build 15063.483),并启用 Win32 长路径。
但我仍然收到错误,无法安装各种 npm 包。
在测试是否是具有大量依赖项的软件包的问题时,我尝试安装或重新安装其他几个软件包。
有些因上述错误而失败。其他人则通过以下警告成功:
npm WARN Unexepcted warming for https://registry.npmjs.org/: Miscellaneous Warning PATH_LENGTH_EXCEEDED: request to https://registry.npmjs.org/{{package name}} failed, reason: path length constraint exceeded
npm WARN Using stale package data from https://registry.npmjs.org/ due to a request error during validation
引发错误的软件包包括: jslint ngx-cookie 服务 图表.js 角度剪辑
引发警告的软件包包括: 字体真棒 @角/cli 片刻 ngx-bootstrap 引导程序 茉莉花
我怀疑是我的工作站上的策略或我们的网络安全中发生了一些变化,这导致了这种情况。所有成功的包似乎都是我之前安装的包,或者直接安装,或者作为 @angular/cli 的依赖项(我安装的第一个包之一)。我假设过时的包数据警告表明我在路径长度方面遇到的任何问题都会阻止检索更新的数据,因此 npm 正在回退到来自所选包及其依赖项的先前安装的缓存数据。
所以现在我不知道如何准确诊断问题发生在哪里。如果它的安全策略发生了变化,那么我需要能够准确地描述被阻止的内容,以便我可以与我们的安全部门合作解决这个问题。但是我能找到的关于 PATH_LENGTH_EXCEEDED 错误的唯一信息让我找到了关于 3.1.0 之前的 npm 版本的旧信息。
我怎样才能确定这个问题的根源?
【问题讨论】:
标签: npm npm-install