Почему после обновления композитора каталог поставщика теряется?
У меня ВМ со следующим composer.json
файл в /vagrant
:
{
"require": {
"drush/drush": "dev-master"
}
}
потом, когда я бегу composer update
в этой папке он загружает требования, но /vagrant/vendor
вместо ожидаемого локального каталога HOME как обычно (~/.composer/vendor
).
Есть ли причина, почему и как это исправить?
Я использую:
Composer version 1.0-dev (15face5432d7b7334db6ac69fac0190971cafa6e) 2015-09-23 17:46:25
на Ubuntu 15.04.
2 ответа
Так работает композитор. Если вы хотите что-то добавить в ~/.composer/vendor
тогда вы должны положить его в ~/.composer/composer.json
, По умолчанию каталог поставщика будет расположен рядом с composer.json
файл.
У вас есть несколько вариантов здесь. Лучше всего просто обойтись без /vendor/composer.json
и просто беги composer global require "drush/drush": "dev-master"
вместо. Что добавит drush/drush
в ~/.composer/composer.json
и установите его. Затем вы получите символическую ссылку на каталог Drush в ~/.composer/vendor/bin
Я подозреваю, к чему вы стремитесь.
Что касается обходного пути, использовать файл JSON, который не находится в ~/.composer/composer.json
, путь поставщика может быть указан в config
/ vendor-dir
, например:
{
"config": {
"vendor-dir": "~/.composer/vendor"
},
"require": {
"drush/drush": "dev-master"
}
}
который должен установить drush
в ~/.composer/vendor/drush/drush/drush
затем необходимо выполнить соответствующее изменение переменной PATH, например,
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
Чтобы сделать его глобальным (запустив как root
), Похоже /var/lib/vendor
может быть использован для vendor-dir
и либо добавьте правильный путь к переменной PATH в одном из глобальных файлов, таких как /etc/bash.bashrc
или же /etc/profile
альтернативно укажите bin-dir
в файле JSON, например:
{
"config": {
"vendor-dir": "/var/lib/vendor",
"bin-dir": "/usr/local/bin"
},
"require": {
"drush/drush": "dev-master"
}
}
который установит drush
во всем мире с минимальной головной болью, как /usr/local/bin
должно быть уже в ПУТИ.
Или, если вы не хотите жестко задавать путь в файле JSON (чтобы его можно было использовать между разными службами), есть еще более простой способ, предложенный, например, jonhattan:
Способ VM (как root):
COMPOSER_HOME=/var/lib/composer COMPOSER_BIN_DIR=/usr/local/bin COMPOSER_VENDOR_DIR=/var/lib/composer/vendor composer -nqq install --no-interaction --optimize-autoloader
Трэвис CI путь:
COMPOSER_BIN_DIR=~/bin composer -nqq install --no-interaction --optimize-autoloader --prefer-source
Вместо install
Вы также можете использовать update
,