Npm ошибки установки на vagrant/homestead/windows: EPROTO: ошибка протокола, symlink

Я строю свой первый проект в Laravel и пытаюсь использовать Elixir, используя hometead на Windows 8.1. Я столкнулся с известной проблемой npm/vagrant со слишком длинными путями: https://harvsworld.com/2015/how-to-fix-npm-install-errors-on-vagrant-on-windows-because -The-пути-это слишком долго /

Поэтому я сделал редактирование в одну строку, рекомендованное в этой статье (слава богу, за этого парня), а затем запустил (с и без sudo): npm install --no-bin-links

Это продвинуло меня вперед, и теперь я получаю два вида ошибок: некоторые ошибки "Отсутствует доступ при записи" и куча ошибок "EACCES":

Вывод ошибки дает мне следующую подсказку в поиске мусора (я думаю): Пожалуйста, попробуйте снова запустить эту команду от имени пользователя root/Administrator.

Это подводит меня к этому посту, но для меня разница в том, что нет изменений даже после того, как я использую sudo (или обновляю свои пользовательские разрешения, например, так):

судо чоун -R $ USER/usr/local

Судо Чоун -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/Код/Семейный Laravel/node_modules/Laravel-эликсир/node_modules/глоток-дерзость/node_modules/.bin/узел-дерзость

Затем, после часа работы над другими вещами, я вернулся свежим и переделал эти шаги, на этот раз получая гораздо меньше ошибок:

  • sudo npm -g установить npm @latest (отлично)

  • sudo npm install --no-bin-links (только ошибка ETXTBSY и ошибка в плагине "последовательность выполнения", в задаче "sass")

  • sudo npm перестроить node-sass --no-bin-links (без ошибок!)

  • глоток (только одна ошибка: не найдено: уведомить-отправить)

Все ближе!

Ответы

Ответ 1

Я пытался выяснить эту проблему в течение нескольких недель. Вот что я сделал, чтобы он работал без использования моей среды хоста:

Я обновил node до последней версии в homestead в соответствии с nodeource.com:

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

Я обновил npm до последней версии в усадьбе. Это необходимо сделать после обновления node:

sudo npm -g install [email protected]est

Я запускал npm install в каталоге проекта laravel. Я также должен был использовать силу для установки всех зависимостей для установки:

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

Я перестроил node -sass в соответствии с ошибкой gulp:

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

В течение всего этого процесса, если что-то не удается или после каждой установки, я использовал:

sudo npm cache clear

Мой хост - это окна 10 с новейшим виртуальным боксом, последним бродячим, последним усадьбой. Я использовал git bash в качестве администратора и ssh для бродяг, используя git bash.

До сих пор я только тестировал и подтверждал, что работает мой gulp. Возможно, необходимо перестроить другие зависимости.

Надеюсь, это поможет!

Ответ 2

Причиной вашей первоначальной ошибки EACCES было то, что вы использовали sudo без использования опции -H. НИКОГДА не используйте sudo npm. ВСЕГДА используйте sudo -H npm.

Инструкции в Интернете везде (включая документацию по NPM) просто неверны.

Ответ 3

Как многие из вас, кто также настраивает Homestead с помощью Virtual Box...

После поиска решения я решил вернуться к документации 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

enter image description here