vagrant/homestead/windows 上的 npm 安装错误:EPROTO:协议错误,符号链接
Posted
技术标签:
【中文标题】vagrant/homestead/windows 上的 npm 安装错误:EPROTO:协议错误,符号链接【英文标题】:npm install errors on vagrant/homestead/windows: EPROTO: protocol error, symlink 【发布时间】:2016-01-16 03:07:15 【问题描述】:我正在 Laravel 中构建我的第一个项目并尝试使用 Elixir,在 Windows 8.1 上使用宅基地。我遇到了已知的 npm/vagrant 过长路径名问题: https://harvsworld.com/2015/how-to-fix-npm-install-errors-on-vagrant-on-windows-because-the-paths-are-too-long/
所以我做了那篇文章中推荐的单行编辑(感谢那家伙),然后运行(有和没有 sudo): npm install --no-bin-links
它让我前进了,所以现在我得到了两种不同类型的错误:一些“缺少写访问”错误和一堆“EACCES”错误:
错误输出为我提供了寻宝游戏的下一个线索(我认为): 请尝试以 root/管理员身份再次运行此命令
这将我带到this post,但对我来说不同的是,即使在我使用 sudo(或像这样更新我的用户权限)之后也没有任何变化:
sudo chown -R $USER /usr/local
sudo chown -R $(whoami) ~/.npm
更新:然后在下面的建议之后我收到 EPROTO 和 EXTXTBSY 错误(即使按照提示的建议重命名 npm-debug.log 回来:
所以我尝试运行 gulp 看看它是否会给我线索,错误输出让我这样做:
sudo npm rebuild node-sass
运行时会出现相同的 EPROTO 和 ETXTBSY 错误,并且 npm-debug.log 文件显示: 错误 EPROTO:协议错误,符号链接 '../node-sass/bin/node-sass' -> '/home/vagrant/Code/Family-laravel/node_modules/laravel-elixir/node_modules/gulp-sass/node_modules/。 bin/node-sass'
然后在做了一个小时的其他工作后,我重新开始并重新执行了这些步骤,这一次错误减少了很多:
sudo npm -g install npm@latest(很好)
sudo npm install --no-bin-links(只是 ETXTBSY 错误和插件“运行序列”中的错误,在任务“sass”中)
sudo npm rebuild node-sass --no-bin-links(没有错误!)
gulp(只有一个错误:未找到:notify-send)
越来越近了!
【问题讨论】:
【参考方案1】:这是我在 VirtualBox 上解决类似问题的方法:
# My Virtualbox image name "centos"
# My shared folder name: localdev
# My mounted directory name on virtualbox: /data
VBoxManage setextradata "centos" VBoxInternal2/SharedFoldersEnableSymlinksCreate/data 1
VBoxManage setextradata "centos" VBoxInternal2/SharedFoldersEnableSymlinksCreate/localdev 1
## see above how i added image name with quotes + my folder names before 1
# I made sure I am running VirtualBox in Administrator Mode
# Boot up the VM and install this:
yum install yarn
# navigate to your code folder and run:
yarn install
【讨论】:
【参考方案2】:我有同样的问题。我在下面做了。它工作正常。
npm install --no-bin-links
【讨论】:
【参考方案3】:我使用此处描述的解决方案解决了我的问题:https://www.prolificinteractive.com/2015/01/21/getting-vagrant-nodejs-windows-play-well-together/
主要技巧在于:
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/path/to/guest/shared/directory", "1"]
希望对某人有所帮助
【讨论】:
【参考方案4】:你们中的许多人也在使用 Virtual Box 设置 Homestead...
在谷歌搜索解决方案后,我决定参考 Laravel Homestead 文档。幸运的是,解决方案已发布在那里:
https://laravel.com/docs/5.8/homestead#provider-specific-settings
您只需将以下内容添加到您的宅基地Vagrantfile。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
(...)
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
(...)
end
重要
别忘了以管理员的身份进行配置。
homestead up --provision
【讨论】:
从 2020 年开始,我只想说……这行得通!将该行添加到 vagrant 并以管理员身份运行npm install
没有任何问题!
我遵循了所有这些步骤,但是vagrant up --provision
。它仍然返回符号链接错误npm ERR! EPROTO: protocol error, symlink '../@babel/parser/bin/babel-parser.js' -> '/home/vagrant/Code/app_folder/node_modules/.bin/parser'
这是 Laravel 8 安装。
@Sadee 这是不久前完成的。我的印象是当前版本可能需要不同的方法。
文档仍然将此列为修复。它什么也没做。【参考方案5】:
您最初的EACCES
错误的原因是您使用了sudo
而没有使用-H
选项。永远不要使用sudo npm
。始终使用sudo -H npm
。
互联网上到处都是(包括 NPM 文档)的说明是完全错误的。
【讨论】:
【参考方案6】:我已经尝试解决这个问题好几个星期了。以下是我在不使用宿主环境的情况下使其工作的方法:
我根据 nodesource.com 将 node 更新到 homestead 的最新版本:
sudo apt-get install --yes nodejs
curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash -
我将 npm 更新到 homestead 的最新版本。这应该在更新节点后完成:
sudo npm -g install npm@latest
我在 laravel 项目目录中运行 npm install。我还不得不使用强制来安装所有依赖项:
sudo npm install --no-bin-links
sudo npm cache clear
sudo npm install --force --no-bin-links
我根据gulp错误重建了node-sass:
sudo npm rebuild node-sass --no-bin-links
在整个过程中,如果出现故障或每次安装后,我使用:
sudo npm cache clear
我的主机是 windows 10,带有最新的 virtualbox、最新的 vagrant、最新的宅基地。我使用 git bash 作为管理员,并使用 git bash SSH 进入 vagrant。
到目前为止,我只测试并确认我的 gulp 有效。可能需要重新构建其他依赖项。
希望这会有所帮助!
【讨论】:
谢谢!!!那些最初的几个链接似乎有帮助,因为当我执行以下操作时,我不再遇到那些“EACCES”错误: sudo npm install --no-bin-links Ugh- 但我应该独自离开,因为现在我做了“强制”之后得到新的 EEXIST 和 ETXTBSY 错误:( 实际上不是:现在 EACCES 错误只是显示在我的 npm-debug.log 中,而不是提示中:/ 我现在在上面添加了最新的错误 - 我从所有论坛帖子中知道让 elixir 与我的 windows vm 一起工作会很糟糕,但是是的,它只是继续下去:p 最后一个问题的答案在这里:gulp-notify: ***.com/questions/31431503/… 谢谢你,*** 宇宙! sudo npm cache clear,解决了错误一直发生以上是关于vagrant/homestead/windows 上的 npm 安装错误:EPROTO:协议错误,符号链接的主要内容,如果未能解决你的问题,请参考以下文章