在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。
2020年2月18日 下午5:30 沙发
不让出门,只能刷刷博客了!
2020年3月16日 下午2:39 板凳
You’re great. Learn from you!
2020年3月28日 上午12:02 地板
May the world be free from disease