前端npm install报错too many levels of symbolic links解决办法

2020年1月7日16:33:17 3 6,540 ℃

在Linux环境通过Jenkins构建前端项目,只要执行npm install安装模块以后,就会报错:

node_modules/webpack/node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast/node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer/node_modules/@webassemblyjs/ast/node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer/node_modules/@webassemblyjs/ast/node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer/node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer/node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer/node_modules/@webassemblyjs/wast-parser -- too many levels of symbolic links

这个报错会导致服务器CPU持续飙高,直到Jenkins内存溢出以后,才会正常。

分析原因主要是npm install 安装的时候模块会创建软连接,然后模块之间相互引用,而这个软连接又是使用的相对路径,导致某些文件夹深度是死循环,从而会耗尽Jenkins的堆内存。

2018年就遇到了这个问题,由于并不是每次install都会出现这种问题,还能忍受,其次找遍了百度,没有找到相关的处理方法。

最近又被这个问题困扰,一开始也只找到npm unlink之类的处理方法,此方法不太现实。

最后终于在谷歌找到一篇文章说了这个问题的解决方法,分享给遇到此问题的童鞋。

原因:npm默认会使用symbolic links来安装组件,也即我们在linux系统里经常用的软链接(ln -s)或硬链接(ln),但是有些文件系统不支持文件链接,比如Windows(或者说出于安全原因禁用了),有时候linux系统运行在有windows分区的硬盘上也不支持链接,比如virtualbox在windows主机上默认禁止在共享文件夹里使用symbolic links。

解决办法:在npm install的时候加上一个参数,就是--no-bin-links,也即npm install --no-bin-links。(The --no-bin-links argument will prevent npm from creating symlinks for any binaries the package might contain.)或者全局设置npm config set bin-links false,这样其他npm命令后面就不需要添加--no-bin-links。

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论取消回复

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  0   博主  0

    • avatar porndodo 1

      不让出门,只能刷刷博客了!

      • avatar PornDodo 1

        You’re great. Learn from you!

        • avatar PornDodo 1

          May the world be free from disease