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

npm install errors on vagrant/homestead/windows: EPROTO: protocol error, symlink

我正在 Laravel 构建我的第一个项目并尝试使用 Elixir,在 Windows 8.1 上使用 homestead。我遇到了已知的 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

它让我前进,所以现在我遇到了两种不同类型的错误:一些 'Missing write access' 错误,以及一堆“EACCES”错误:

错误输出为我提供了寻宝游戏的下一条线索(我认为): 请再次尝试 运行 此命令作为 root/Administrator

这让我想到 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'

然后在处理了一个小时的其他东西后,我重新回来并重新执行了这些步骤,这次得到的错误更少了:

越来越近了!

几周来我一直在努力解决这个问题。这是我在不使用主机环境的情况下使它工作的方法:

我根据nodesource.com:

更新了homestead中的node到最新版本
sudo apt-get install --yes nodejs
curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash -

我在 homestead 更新了 npm 到最新版本。这应该在更新节点后完成:

sudo npm -g install npm@latest

我运行npm安装在laravel项目目录下。我还必须使用强制来安装所有依赖项:

sudo npm install --no-bin-links
sudo npm cache clear
sudo npm install --force --no-bin-links

我根据 gulp 错误重建了节点-sass:

sudo npm rebuild node-sass --no-bin-links

在整个过程中,如果出现故障或每次安装后,我使用:

sudo npm cache clear

我的主机是windows 10,有最新的virtualbox,最新的vag运行t,最新的homestead。我使用 git bash 作为管理员并使用 git bash.

ssh 进入 vag运行t

到目前为止,我只测试并确认我的 gulp 有效。可能还需要重建其他依赖。

希望对您有所帮助!

您最初 EACCES 错误的原因是您使用了 sudo 而没有使用 -H 选项。永远不要使用 sudo npm。始终使用 sudo -H npm.

网上到处的说明(包括 NPM 文档)都是错误的。

你们中的许多人也在使用 Virtual Box 设置 Homestead...

在谷歌搜索解决方案后,我决定参考 Laravel Homestead 文档。幸运的是解决方案发布在那里:

https://laravel.com/docs/5.8/homestead#provider-specific-settings

您只需将以下内容添加到您的 homestead 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

我使用此处描述的解决方案解决了我的问题: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"]

希望对大家有所帮助

我遇到了同样的问题。我在下面做了。它工作正常。

npm install --no-bin-links

以下是我在 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