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

时间:2015-10-17 11:32:44

标签: laravel npm symlink homestead

我正在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 / Administrator

再次运行此命令

这让我感到this post,但对我而言,即使我使用sudo(或更新我的用户权限)之后也没有任何变化:

sudo chown -R $ USER / usr / local

sudo chown -R $(whoami)〜/ .npm

更新:然后在下面的建议之后我得到EPROTO和EXTXTBSY错误(甚至在按照提示建议重命名npm-debug.log后: enter image description here

所以我试着运行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(fine)

  • sudo npm install --no-bin-links(只是ETXTBSY错误和插件中的错误'运行序列',在任务' sass')

  • sudo npm rebuild node-sass --no-bin-links(没有错误!)

  • gulp(只有一个错误:未找到:notify-send)

越来越近了!

6 个答案:

答案 0 :(得分:41)

我一直试图找出这个问题好几个星期。以下是我在不使用主机环境的情况下完成的工作:

我根据nodesource.com将节点更新到宅基地的最新版本:

<form action="contact_script.php" method="post">
  Name<br>
  <input type="text" name="cf_name"><br>
  Telephone<br>
  <input type="text" name="cf_telephone"><br>
  E-mail<br>
  <input type="text" name="cf_email"><br>
  Enquiry<br>
  <textarea name="cf_message"></textarea><br>
  <input type="submit" value="Send">
  <input type="reset" value="Clear">
  </form>

我将npm更新为宅基地的最新版本。这应该在更新节点后完成:

<?php
 $field_name = $_POST['cf_name'];
 $field_telephone = $_POST['cf_telephone'];
 $field_email = $_POST['cf_email'];
 $field_message = $_POST['cf_message'];


 $mail_to = 'myemail@mail.com';
 $subject = 'Message from a site visitor '.$field_name;

 $body_message = 'From: '.$field_name."\n";
 $body_message = 'Contact Number: '.$field_telephone."\n";
 $body_message .= 'E-mail: '.$field_email."\n";
 $body_message .= 'Message: '.$field_message;

 $headers = 'From: '.$field_email."\r\n";
 $headers .= 'Reply-To: '.$field_email."\r\n";  

 $mail_status = mail($mail_to, $subject, $body_message);

 if ($mail_status) { ?>
     <script language="javascript" type="text/javascript">  
      alert('Thank you for the message. We will contact you shortly.');
      window.location = 'home.php';
    </script>
 <?php
 }
 else { ?>
     <script language="javascript" type="text/javascript">
         alert('Message failed. Please, send an email to info@mail.com');
         window.location = 'home.php';
     </script>
 <?php 
 }
 ?>

我在laravel项目目录中运行了npm install。我还必须使用force来获取所有依赖项:

sudo apt-get install --yes nodejs
curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash -

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

sudo npm -g install npm@latest

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

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

我的主机是Windows 10,最新的虚拟盒,最新的流浪汉,最新的家园。我使用git bash作为管理员,使用git bash使用ssh进入vagrant。

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

希望这有帮助!

答案 1 :(得分:1)

最初的EACCES错误的原因是您使用sudo而不使用-H选项。切勿使用sudo npm。始终使用sudo -H npm

Internet上的说明(包括NPM文档)完全是错误的。

答案 2 :(得分:0)

许多人还使用 Virtual Box ...

设置Homestead

在寻找解决方案之后,我决定参考 Laravel Homestead 文档。幸运的是,解决方案已发布在此处:

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

您只需将以下内容添加到您的宅基地 Vagrantfile

dataset

重要

请不要忘记将自己设置为管理员

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| (...) config.vm.provider "virtualbox" do |v| v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end (...) end

enter image description here

答案 3 :(得分:0)

我使用以下描述的解决方案解决了我的问题: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 :(得分:0)

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

npm install --no-bin-links

答案 5 :(得分:0)

这是我解决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