在Linux環(huán)境通過(guò)Jenkins構(gòu)建前端項(xiàng)目,只要執(zhí)行npm install安裝模塊以后,就會(huì)報(bào)錯(cuò):
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
這個(gè)報(bào)錯(cuò)會(huì)導(dǎo)致服務(wù)器CPU持續(xù)飆高,直到Jenkins內(nèi)存溢出以后,才會(huì)正常。
分析原因主要是npm install 安裝的時(shí)候模塊會(huì)創(chuàng)建軟連接,然后模塊之間相互引用,而這個(gè)軟連接又是使用的相對(duì)路徑,導(dǎo)致某些文件夾深度是死循環(huán),從而會(huì)耗盡Jenkins的堆內(nèi)存。
2018年就遇到了這個(gè)問(wèn)題,由于并不是每次install都會(huì)出現(xiàn)這種問(wèn)題,還能忍受,其次找遍了百度,沒(méi)有找到相關(guān)的處理方法。
最近又被這個(gè)問(wèn)題困擾,一開(kāi)始也只找到npm unlink之類(lèi)的處理方法,此方法不太現(xiàn)實(shí)。
最后終于在谷歌找到一篇文章說(shuō)了這個(gè)問(wèn)題的解決方法,分享給遇到此問(wèn)題的童鞋。
原因:npm默認(rèn)會(huì)使用symbolic links來(lái)安裝組件,也即我們?cè)趌inux系統(tǒng)里經(jīng)常用的軟鏈接(ln -s)或硬鏈接(ln),但是有些文件系統(tǒng)不支持文件鏈接,比如Windows(或者說(shuō)出于安全原因禁用了),有時(shí)候linux系統(tǒng)運(yùn)行在有windows分區(qū)的硬盤(pán)上也不支持鏈接,比如virtualbox在windows主機(jī)上默認(rèn)禁止在共享文件夾里使用symbolic links。
解決辦法:在npm install的時(shí)候加上一個(gè)參數(shù),就是--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.)或者全局設(shè)置npm config set bin-links false,這樣其他npm命令后面就不需要添加--no-bin-links。
2020年2月18日 下午5:30 沙發(fā)
不讓出門(mén),只能刷刷博客了!
2020年3月16日 下午2:39 板凳
You’re great. Learn from you!
2020年3月28日 上午12:02 地板
May the world be free from disease