ELOOP:遇到太多符号链接

Sub*_*tra 11 node.js npm angular

当尝试点击命令时:npm install -g @angular/cli@6.1.1

注意: 我有 Node.Js LTS 10.xx 版本、.Net Framework 4.7.2 开发人员包以及所有必要的扩展。

抛出错误:

npm ERR! code ELOOP
npm ERR! syscall stat
npm ERR! path \\horofs**\users$\
npm ERR! errno -62
npm ERR! ELOOP: too many symbolic links encountered, stat '\\horofs06\users$\'

npm ERR! A complete log of this run can be found in:
npm ERR!     \\horofs**\users$\W****\AppData\Roaming\npm-cache\_logs\2020-07-31T13_26_25_468Z-debug.log
Run Code Online (Sandbox Code Playgroud)

日志指出:

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   '-g',
1 verbose cli   '@angular/cli@6.1.1' ]
2 info using npm@6.14.6
3 info using node@v10.22.0
4 verbose npm-session 8b2e687260b66580
5 silly install loadCurrentTree
6 silly install readGlobalPackageData
7 http fetch GET 200 https://registry.npmjs.org/@angular%2fcli 282ms (from cache)
8 silly pacote version manifest for @angular/cli@6.1.1 fetched in 426ms
9 verbose stack Error: ELOOP: too many symbolic links encountered, stat '\\horofs**\users$\'
9 verbose stack     at eloop (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:58:17)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:19:11)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
9 verbose stack     at realpathCached (C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js:39:10)
10 verbose cwd C:\Cqe\Periscope\src\Periscope\Endava.Periscope.Web
11 verbose Windows_NT 6.3.9600
12 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "@angular/cli@6.1.1"
13 verbose node v10.22.0
14 verbose npm  v6.14.6
15 error code ELOOP
Run Code Online (Sandbox Code Playgroud)

请帮我。

小智 5

我遇到了类似的问题,日志如下:

error ELOOP: too many symbolic links encountered, chmod '/Users/myname/projects/my-electron-app/node_modules/electron/cli.js'
error ELOOP: too many symbolic links encountered, open '/Users/myname/projects/my-electron-app/node_modules/electron/npm-shrinkwrap.json'
Run Code Online (Sandbox Code Playgroud)

当我检查我的文件夹并发现该文件夹electron链接到其自身时,因此它导致了永无休止的循环。

lrwxr-xr-x    1 myname  staff      8 Feb 20 11:42 electron@ -> electron
Run Code Online (Sandbox Code Playgroud)

我检查了大小,直接删除了文件,然后使用npm install electron再次使用。终于成功了。

因此,请检查链接,看起来您的应用程序中的文件也链接到其自身。

我怀疑这应该是一个问题npm,因为npm尝试在实际下载文件之前创建链接。


小智 2

下面大家可以自行判断。令人失望的情况是,当您的用户数据存储在具有超过 2,000 个子文件夹的文件夹中时,您可能无法使用 NodeJS。和您一样,我的 User 文件夹存储在网络驱动器而不是 C 上:在“readGlobalPackageData()”中,self.where 的值传递给 readPackageTree。就我而言,self.where =“\[域]\users$[办公位置][用户ID]\AppData\npm。” realpathCached() 中的代码正在退出该路径并尝试读取所有子文件夹。当到达“\[domain]\users$”时,会记录“ELOOP”错误,因为最大深度为 2000,而我公司的 Users 文件夹有超过 25,000 个子文件夹。

以下是两种可能的解决方案:首先,从安装命令中删除 -g 以使安装本地到新应用程序的文件夹。缺点是,如果某个依赖项有更新,则必须在未使用 -g 的任何地方手动安装它。如果更新包含重大更改,那可能会很好。

其次,我不推荐此解决方案,即编辑安装程序文件之一。安装程序正在读取用户文件夹中的所有 ID 文件夹,但失败只是因为达到了任意限制。如果增加限制,错误应该会消失,但您还可以让脚本读取网络上的所有用户 ID。尝试此操作需要您自担风险。打开此文件:C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-tree\realpath.js。在第 18 行,“if (深度 > 2000)”,将 2000 更改为大于 users$(共享)文件夹下的文件夹数量的数字。