vagrant/homestead/windows 上的 npm 安装错误:EPROTO:协议错误,符号链接

     2023-02-24     189

关键词:

【中文标题】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,解决了错误一直发生