Laravel npm install 報(bào)錯(cuò)syscall symlink的原因及解決辦法

在npm install過(guò)程中,最常見(jiàn)的錯(cuò)誤恐怕就是syscall symlink錯(cuò)誤,報(bào)錯(cuò)一般是這樣的:

npm ERR! Linux 3.19.0-25-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v4.1.1
npm ERR! npm v2.14.4
npm ERR! path ../user-home/cli.js
npm ERR! code EPROTO
npm ERR! errno -71
npm ERR! syscall symlink

npm ERR! EPROTO: protocol error, symlink '../user-home/cli.js' -> '/home/vagrant/Sites/laravel/node_modules/gulp/node_modules/v8flags/node_modules/.bin/user-home'

為什么會(huì)這樣呢?

原因是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,當(dāng)然也是出于安全考慮。
那么npm install默認(rèn)需要使用symbolic link,而且這也本身也是npm比較重要的一個(gè)特性,但如果我們的系統(tǒng)不支持這一屬性的話(huà),就會(huì)報(bào)上面的錯(cuò)誤了。
解決辦法,就是在npm install的時(shí)候加上一個(gè)參數(shù),就是--no-bin-links,也即npm install --no-bin-links:
也即是說(shuō),為了防止syscall symlink錯(cuò)誤,如果你是在windows使用npm,或者即使在homestead里,但主機(jī)是windows,那么每次你執(zhí)行npm安裝或更新組件相關(guān)的命令時(shí),都要在后面加上--no-bin-links,比如你要npm update --no-bin-links,你也要npm rebuild node-sass -no-bin-links,確實(shí)挺麻煩的
當(dāng)然,你也可以整體設(shè)置一下npm,讓它默認(rèn)不再使用文件鏈接功能了,執(zhí)行:

npm config set bin-links false

這樣了以后,再執(zhí)行相關(guān)命令就可以不用帶--no-bin-links了。
執(zhí)行 gulp 命令時(shí)報(bào)錯(cuò):

ENOENT:沒(méi)有這樣的文件或目錄,scandir'/ home / vagrant / Code / sample / node_modules / node-sass / vendor'

解決方案:

使用 npm 重新生成 node-saaa

npm rebuild node-sass --no-bin-links

在windows host中的vagrant box Linux中使用npm install時(shí),由于host os不支持linux的symbol link,所以必須使用 --no-bin-links 命令

其實(shí)windows上也能使用文件鏈接,但條件是,必須是擁有管理員權(quán)限才行,如果你在執(zhí)行vagrant up前,打開(kāi)你的命令行的時(shí)候,使用了管理員權(quán)限來(lái)打開(kāi),那么其實(shí)npm install不加--no-bin-links也不會(huì)報(bào)錯(cuò),但這么個(gè)小細(xì)節(jié),估計(jì)很多大老爺們不會(huì)在意的而且為了這些個(gè)毛病,還得去研究windows的特性,去找辦法更改,回頭系統(tǒng)重裝了又得再來(lái)一遍,著實(shí)劃不來(lái)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容