由于使用NPM 5.X的路径长度限制,无法安装NPM包

由于使用NPM 5.X的路径长度限制,无法安装NPM包,npm,npm-install,Npm,Npm Install,我正在运行Windows 10、NPM v5.5.1和node v8.9.1 编辑:我已经更新到节点v8.9.4和npm v5.6.0。问题没有改变。 大约两个月前,我在这台机器上设置了我的开发环境。我正在使用Angular CLI构建我的客户端应用程序 一切都很顺利。我通过NPM添加了一些没有问题的包,比如Gulp和ngx引导。然后,我开始在一些软件包安装中遇到错误 错误是: npm ERR! code PATH_LENGTH_EXCEEDED npm ERR! errno PATH_LENG

我正在运行Windows 10、NPM v5.5.1和node v8.9.1

编辑:我已经更新到节点v8.9.4和npm v5.6.0。问题没有改变。

大约两个月前,我在这台机器上设置了我的开发环境。我正在使用Angular CLI构建我的客户端应用程序

一切都很顺利。我通过NPM添加了一些没有问题的包,比如Gulp和ngx引导。然后,我开始在一些软件包安装中遇到错误

错误是:

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 ]
我对此进行了研究,发现Windows10文件路径有260个字符的限制。我认为npm版本3.1.0应该已经解决了这个问题,但我决定按照中的说明进行操作,因为尽管使用了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

抛出警告的包包括: 字体真棒 @角度/客户端 瞬间 ngx引导 独自创立 茉莉花

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

所以现在我很困惑,如何准确地诊断问题发生在哪里。如果这是一个安全策略发生了变化,那么我需要能够准确地描述被阻止的内容,以便我能够与我们的安全部门合作解决这个问题。但是,我能找到的关于路径长度错误的唯一信息使我找到了关于3.1.0之前的npm版本的旧信息


如何确定此问题的根源?

在进一步搜索后,我发现对SSL/TLS证书颁发机构的引用超过了路径长度。我通过将npm注册表更改为使用http而不是https来测试此问题(注意:这只是一个临时步骤;我在验证此问题后已重新打开https):

npm配置集注册表http://registry.npmjs.org/

这允许我安装有问题的软件包

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