npm install 报错syscall symlink的原因及解决办法
在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
系统里经常用的软链接(ln -s)或硬链接(ln)
,但是有些文件系统不支持文件链接,比如Windows
(或者说出于安全原因禁用了),有时候linux
系统运行在有windows
分区的硬盘上也不支持链接,比如virtualbox
在windows
主机上默认禁止在共享文件夹里使用symbolic links
,当然也是出于安全考虑。
那么npm install
默认需要使用symbolic link
,而且这也本身也是npm
比较重要的一个特性,但如果我们的系统不支持这一属性的话,就会报上面的错误了。
解决办法
就是在npm install
的时候加上一个参数,就是--no-bin-links
,也即npm install --no-bin-links
:
也即是说,为了防止syscall symlink错误,如果你是在windows使用npm,或者即使在homestead里,但主机是windows,那么每次你执行npm安装或更新组件相关的命令时,都要在后面加上--no-bin-links,比如你要
npm update --no-bin-links
npm rebuild node-sass -no-bin-links
确实挺麻烦的
当然,你也可以整体设置一下npm,让它默认不再使用文件链接功能了,执行:
npm config set bin-links false
这样了以后,再执行相关命令就可以不用带--no-bin-links
了。
执行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上也能使用文件链接,但条件是,必须是拥有管理员权限才行,如果你在执行vagrant up前,打开你的命令行的时候,使用了管理员权限来打开,那么其实npm install不加--no-bin-links也不会报错,但这么个小细节,估计很多大老爷们不会在意的而且为了这些个毛病,还得去研究windows的特性,去找办法更改,回头系统重装了又得再来一遍,着实划不来
版权属于:LCQ(除特别注明外)
原文链接:https://www.jianshu.com/p/b7a1e6cfb95a
本站文章采用 知识共享署名4.0 国际许可协议 进行许可,请在转载时注明出处及本声明!