Laravel Homestead环境安装npm时报错errno -71如何解决?
该报错是Windows作为宿主机运行Homestead时的典型问题:VirtualBox默认未给共享文件夹开放创建符号链接(symlink)的权限,npm安装依赖时默认会为二进制工具创建软链接,触发权限限制导致安装失败。
报错完整信息如下:
npm ERR! code EPROTO npm ERR! syscall symlink npm ERR! path ../@babel/parser/bin/babel-parser.js npm ERR! dest /home/vagrant/code/agenda/node_modules/.bin/parser npm ERR! errno -71 npm ERR! EPROTO: protocol error, symlink '../@babel/parser/bin/babel-parser.js' ... npm ERR! A complete log of this run can be found in: npm ERR! /home/vagrant/.npm/_logs/2021-06-22T10_09_53_969Z-debug.log
按实现难度从低到高排序,可根据自身需求选择:
方案一:临时关闭npm软链接创建
直接在安装命令后添加--no-bin-links参数,强制npm复制文件而非创建软链接,适配绝大多数Vue项目依赖:npm install --no-bin-links仅当依赖强制要求软链接时该方案会失效,普通项目可直接使用。
方案二:修改Homestead配置开放symlink权限(根治方案)
- 关闭正在运行的Homestead实例:
vagrant halt- 打开Homestead根目录下的
Vagrantfile文件,找到共享文件夹配置段,添加挂载参数:
找到对应config.vm.synced_folder的配置行,修改为:
config.vm.synced_folder ".", "/vagrant", mount_options: ["dmode=775", "fmode=664", "vers=3.02"]再找到VirtualBox配置块,添加symlink权限配置:
config.vm.provider "virtualbox" do |vb| # 原有配置保留,新增下面这行 vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"] end- 保存文件后,以管理员身份打开本地终端,重新启动Homestead:
vagrant up启动完成后进入项目目录正常运行
npm install即可。方案三:挂载node_modules到虚拟机本地目录
该方案同时解决共享文件夹下npm安装速度慢的问题:- 进入Homestead虚拟机,创建本地存储node_modules的目录:
mkdir -p /home/vagrant/node_modules/agenda- 进入项目目录执行挂载:
cd /home/vagrant/code/agenda sudo mount --bind /home/vagrant/node_modules/agenda /home/vagrant/code/agenda/node_modules- 如需开机自动挂载,将以下内容添加到虚拟机的
/etc/fstab文件末尾即可:
/home/vagrant/node_modules/agenda /home/vagrant/code/agenda/node_modules none bind 0 0
内容的提问来源于stack exchange,提问作者Ludovic Laisnez

