1

У меня есть VM со следующим файлом 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 ответа2

2

Так работает композитор. Если вы хотите что-то добавить в ~/.composer/vendor , то вы должны поместить это в ~/.composer/composer.json . По умолчанию каталог vendor будет расположен рядом с файлом composer.json .

У вас есть несколько вариантов здесь. Лучше всего, вероятно, просто обойтись без /vendor/composer.json , и просто запустить composer global require "drush/drush": "dev-master" . Это добавит drush/drush в ~/.composer/composer.json и установит его. Затем вы получите символическую ссылку на каталог Drush в ~/.composer/vendor/bin , который, я подозреваю, к чему вы стремитесь.

0

Что касается обходного пути, для использования файла 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 уже должен быть в PATH.


Или, если вы не хотите жестко задавать путь в файле 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .