由于使用NPM 5.X

时间:2018-02-08 15:20:45

标签: npm npm-install

我正在运行Windows 10,NPM v5.5.1和节点v8.9.1。

编辑:我已更新到节点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的服务 chart.js之 角-CLI

抛出警告的软件包包括: 字体真棒 @角/ CLI 时刻 NGX自举 引导 茉莉

我怀疑在我的工作站上的策略或我们的网络安全中发生了一些变化,这导致了这种情况。所有成功的软件包似乎都是我之前安装的软件包,可以是直接安装,也可以是@ angular / cli(我安装的第一个软件包之一)的依赖项。我假设过时的包数据警告表明我对路径长度的任何问题都阻止了检索更新的数据,因此npm将回退到以前安装所选包及其依赖项的缓存数据。

所以现在我对如何准确诊断出问题的确切位置感到困惑。如果它的安全策略发生了变化,那么我需要能够准确描述被阻止的内容,以便我可以与我们的安全部门一起解决这个问题。但是我能找到的关于PATH_LENGTH_EXCEEDED错误的唯一信息让我得到关于3.1.0之前的npm版本的旧信息。

如何确定此问题的根源?

1 个答案:

答案 0 :(得分:0)

经过额外搜索后,我发现有关SSL / TLS证书颁发机构的路径长度超出参考。我通过将npm注册表更改为使用http而不是https来测试此问题(注意:这只是临时步骤;我在验证问题后重新启用了https):

npm config set registry http://registry.npmjs.org/

这允许我安装有问题的包。

似乎潜在的原因是我们的网络安全团队执行的SSL检查。解密,检查和重新加密过程以及​​证书上颁发机构的后续更改显然会触发此错误。