在npm install過程中充坑,最常見的錯誤恐怕就是syscall symlink錯誤廊营,報錯一般是這樣的:
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'
為什么會這樣呢体箕?
原因是npm默認會使用symbolic links來安裝組件港华,也即我們在linux系統(tǒng)里經(jīng)常用的軟鏈接(ln -s)或硬鏈接(ln)脾歇,但是有些文件系統(tǒng)不支持文件鏈接刻蟹,比如Windows(或者說出于安全原因禁用了)逗旁,有時候linux系統(tǒng)運行在有windows分區(qū)的硬盤上也不支持鏈接,比如virtualbox在windows主機上默認禁止在共享文件夾里使用symbolic links,當然也是出于安全考慮舆瘪。
那么npm install默認需要使用symbolic link片效,而且這也本身也是npm比較重要的一個特性,但如果我們的系統(tǒng)不支持這一屬性的話英古,就會報上面的錯誤了淀衣。
解決辦法,就是在npm install的時候加上一個參數(shù)召调,就是--no-bin-links膨桥,也即npm install --no-bin-links:
也即是說,為了防止syscall symlink錯誤唠叛,如果你是在windows使用npm只嚣,或者即使在homestead里,但主機是windows艺沼,那么每次你執(zhí)行npm安裝或更新組件相關的命令時册舞,都要在后面加上--no-bin-links,比如你要npm update --no-bin-links,你也要npm rebuild node-sass -no-bin-links,確實挺麻煩的
當然障般,你也可以整體設置一下npm调鲸,讓它默認不再使用文件鏈接功能了,執(zhí)行:
npm config set bin-links false
這樣了以后挽荡,再執(zhí)行相關命令就可以不用帶--no-bin-links了藐石。
執(zhí)行 gulp 命令時報錯:
ENOENT:沒有這樣的文件或目錄,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時定拟,由于host os不支持linux的symbol link贯钩,所以必須使用 --no-bin-links 命令
其實windows上也能使用文件鏈接,但條件是办素,必須是擁有管理員權限才行角雷,如果你在執(zhí)行vagrant up前,打開你的命令行的時候性穿,使用了管理員權限來打開勺三,那么其實npm install不加--no-bin-links也不會報錯,但這么個小細節(jié)需曾,估計很多大老爺們不會在意的而且為了這些個毛病吗坚,還得去研究windows的特性祈远,去找辦法更改,回頭系統(tǒng)重裝了又得再來一遍商源,著實劃不來