РЕДАКТИРОВАТЬ: см. Обновленный раздел ниже, где я изменил код в соответствии с предложениями решения
Я использую vagrant с усадьбой на моей машине win7. И я хочу установить некоторые пакеты gulp, например, gulp-uncss, который не работает, потому что я получаю сообщение об ошибке, добавленное ниже.
После некоторых исследований и обсуждений на канале #npm IRC мне подсказали эту проблему здесь:
Согласно этой записи, пользователи Windows по-прежнему сталкиваются с проблемой при использовании vagrant, поскольку общая папка между хостом и гостевым компьютером имеет ограничение по максимальному количеству символов в 260 символов, что всегда было основной проблемой при разработке Windows.
Похоже, решение состоит в том, чтобы изменить файл vagrant и положения вместе с ним.
Вот начальная ошибка:
vagrant@homestead:~/Code/Wordpress/wp-content/themes/expimo$ gulp uncss
[10:51:07~/Code/Wordpress/wp-content/themes/expimo/gulpfile.js
[10:51:07] Starting 'uncss'...
/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/bluebird/js/main/async.js:43
fn = function () { throw arg; };
^
TypeError: Bad argument
at TypeError (native)
at ChildProcess.spawn (child_process.js:1136:26)
at /home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/lib/spawn.js:82:38
at init (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePro
at new Promise (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePromise.js:27:53)
at Function.promise (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/when.js:97:10)
at startPhantom (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/lib/spawn.js:58:25)
at tryCatchReject (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePromise.js:845:30)
at runContinuation1 (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePromise.js:804:4)
at Fulfilled.when (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePromise.js:592:4)
at Pending.run (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/makePromise.js:483:13)
at Scheduler._drain (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/Scheduler.js:62:19)
at Scheduler.drain (/home/vagrant/Code/Wordpress/wp-content/themes/expimo/node_modules/gulp-uncss/node_modules/uncss/node_modules/phridge/node_modules/when/lib/Scheduler.js:27:9)
at process._tickCallback (node.js:355:11)
Как я понял из записи, нужно ли мне модифицировать мой Vagrantfile и, возможно, даже добавить некоторые положения?
Это мой текущий Vagrantfile по умолчанию, добавленный через усадьбу:
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION = "2"
homesteadYamlPath = File.expand_path("~/.homestead/Homestead.yaml")
afterScriptPath = File.expand_path("~/.homestead/after.sh")
aliasesPath = File.expand_path("~/.homestead/aliases")
require_relative 'scripts/homestead.rb'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exists? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "~/.bash_aliases"end
Homestead.configure(config, YAML::load(File.read(homesteadYamlPath)))
if File.exists? afterScriptPath then
config.vm.provision "shell", path: afterScriptPath
end
end
И, видимо, я должен вставить изменения, указанные здесь:
https://github.com/renobit/vagrant-node-env/commit/bdf15f2f301e2b1660b839875e34f172ea8be227
внутри этого Vagrantfile, так что усадьба работает правильно окнами.
Так как я только начал использовать vagrant, мои знания очень ограничены, поэтому я хотел бы получить любую помощь по этой теме. Заранее спасибо.
ОБНОВИТЬ
ОБНОВЛЕНИЕ к предложению Дэвида Майерса:
Я изменил свой Vagrantfile в соответствии с предложением Дэвида Майерса ниже, но безрезультатно:
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION = "2"confDir = $confDir ||= File.expand_path("~/.homestead")
homesteadYamlPath = confDir + "/Homestead.yaml"afterScriptPath = confDir + "/after.sh"aliasesPath = confDir + "/aliases"
require File.expand_path(File.dirname(__FILE__) + '/scripts/homestead.rb')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exists? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "~/.bash_aliases"end# this should be inserted right before the "Homestead.configure()" line
config.vm.provider "virtualbox" do |v, override|
if Vagrant::Util::Platform.windows?
override.vm.synced_folder "./Code", "/home/vagrant/Code", disabled: true
v.customize ["sharedfolder", "add", :id, "--name", "Code", "--hostpath", (("//?/" + File.dirname(__FILE__) + "/Code").gsub("/","\\"))]
override.vm.provision :shell, inline: "mkdir -p /home/vagrant/Code"override.vm.provision :shell, inline: "mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` Code /home/vagrant/Code", run: "always"else
override.vm.synced_folder "./Code", "/home/vagrant/Code"end
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/Code", "1"]
end
# this should be inserted right before the "Homestead.configure()" lineHomestead.configure(config, YAML::load(File.read(homesteadYamlPath)))
if File.exists? afterScriptPath then
config.vm.provision "shell", path: afterScriptPath
end
end
И я также прокомментировал три строки, которые вы указали в моем файле Homestead.yaml:
---
ip: "192.168.10.10"memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
# folders:
# - map: ~/Code
# to: /home/vagrant/Code
sites:
- map: expimo.app
to: /home/vagrant/Code/Wordpress
- map: laravel.app
to: /home/vagrant/Code/laravel/public
databases:
- homestead
variables:
- key: APP_ENV
value: local
К сожалению, тогда я получаю сообщение об ошибке:
Не указан входной файл, потому что кажется, что URI не направлены в нужную папку.
Если затем я просто раскомментирую три строки в моем файле homestead.yaml и сохраню измененный файл Vagrantfile, я получу ту же ошибку, когда пытаюсь установить gulp-uncss через «npm install gulp-uncss —save-dev» ,
Что я должен делать дальше?
Я тот, кто реализовал это исправление, которое вы упомянули. 🙂
Лично я еще не сталкивался с этой проблемой с Homestead, но думаю, что знаю, что тебе нужно сделать. Во-первых, вам нужно закомментировать эти строки в Homestead.yaml
файл:
folders
- map: ~/Code
to: /home/vagrant/Code
Далее вам нужно добавить эту конфигурацию в ваш Vagrantfile
:
# this should be inserted right before the "Homestead.configure()" line
config.vm.provider "virtualbox" do |v, override|
if Vagrant::Util::Platform.windows?
override.vm.synced_folder "./Code", "/home/vagrant/Code", disabled: true
v.customize ["sharedfolder", "add", :id, "--name", "Code", "--hostpath", (("//?/" + File.dirname(__FILE__) + "/Code").gsub("/","\\"))]
override.vm.provision :shell, inline: "mkdir -p /home/vagrant/Code"override.vm.provision :shell, inline: "mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` Code /home/vagrant/Code", run: "always"else
override.vm.synced_folder "./Code", "/home/vagrant/Code"end
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/Code", "1"]
end
# this should be inserted right before the "Homestead.configure()" line
Обратите внимание на комментарии в предыдущем блоке; Вы должны убедиться, что он вставлен до запуска конфигурации Homestead.
ПРИМЕЧАНИЕ. В этом сценарии предполагается, что вы используете каталог «Код», который находится в том же каталоге, что и этот файл Vagrantfile.
Я подготовил полное руководство / пошаговое руководство для Homestead по Windows, в котором рассматриваются все эти проблемы (и другие, такие как проблемы с кэшированием в winnfsd / etc) и решения для Laravel 5. & Lumen. Я буду держать этот Гист в актуальном состоянии (и постоянно улучшать его читабельность). Вы можете найти суть здесь: https://gist.github.com/prograhammer/9493ee04f30dd74e121b
В этом Гисте мне пришлось добавить несколько шагов к решению Дэвида Майерса:
Обновить C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.7.2\plugins\providers\virtualbox\driver\version_4_3.rb
где-то рядом с линиями 495-510, замените линию folder[:hostpath]
с '\\\\?\\' + folder[:hostpath].gsub(/[\/\\]/,'\\')]
Обновить C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.7.2\lib\vagrant\util\platform.rb
и закомментируйте большую часть этого раздела:
# This expands the path and ensures proper casing of each part
# of the path.
def fs_real_path(path, **opts)
#path = Pathname.new(File.expand_path(path))
#
# if path.exist? && !fs_case_sensitive?
# # Build up all the parts of the path
# original = []
# while !path.root?
# original.unshift(path.basename.to_s)
# path = path.parent
# end
#
# # Traverse each part and join it into the resulting path
# original.each do |single|
# Dir.entries(path).each do |entry|
# if entry.downcase == single.encode('filesystem').downcase
# path = path.join(entry)
# end
# end
# end
#end
#
# if windows?
# # Fix the drive letter to be uppercase.
# path = path.to_s
# if path[1] == ":"# path[0] = path[0].upcase
# end
#
# path = Pathname.new(path)
#end
path
end
Сейчас бродяга вверх.