Warum wird das Herstellerverzeichnis nach dem Update des Composers falsch platziert?

611
kenorb

Ich habe VM mit der folgenden composer.jsonDatei in /vagrant:

{ "require": { "drush/drush": "dev-master" } } 

dann, wenn ich laufe composer updatein diesem Ordner, wird es die Anforderungen Download aber auf /vagrant/vendor, statt zu erwarten lokales HOME - Verzeichnis wie gewohnt ( ~/.composer/vendor).

Gibt es einen Grund warum und wie man das beheben kann?

Ich benutze:

Composer version 1.0-dev (15face5432d7b7334db6ac69fac0190971cafa6e) 2015-09-23 17:46:25 

auf Ubuntu 15.04.

1

2 Antworten auf die Frage

2
greg_1_anderson

So arbeitet der Komponist. Wenn Sie etwas hinzufügen möchten ~/.composer/vendor, sollten Sie es einfügen ~/.composer/composer.json. Standardmäßig wird das Herstellerverzeichnis neben der composer.jsonDatei platziert.

Sie haben hier einige Möglichkeiten. Das Beste ist wahrscheinlich, einfach darauf zu verzichten /vendor/composer.jsonund composer global require "drush/drush": "dev-master"stattdessen zu laufen . Das wird hinzufügen drush/drushzu ~/.composer/composer.json, und installieren Sie es. Sie haben dann einen Symlink zum Drush-Verzeichnis in ~/.composer/vendor/bin, das, was ich vermute, das ist, wonach Sie streben.

0
kenorb

Wenn Sie eine JSON-Datei verwenden möchten, die sich nicht in diesem Bereich befindet ~/.composer/composer.json, können Sie den Herstellerpfad in config/ angebenvendor-dir, z. B .:

{ "config": { "vendor-dir": "~/.composer/vendor" }, "require": { "drush/drush": "dev-master" } } 

welche installieren sollten drushin ~/.composer/vendor/drush/drush/drush, dann entsprechende Änderung PATH - Variable muss getan werden, zB

ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc 

Um es global zu machen (durch Ausführen von root), kann ich denke, /var/lib/vendordass es verwendet werden kann vendor-dir, und entweder den richtigen Pfad an die PATH-Variable in einer der globalen Dateien anhängen kann, /etc/bash.bashrcoder /etc/profilealternativ bin-dirin der JSON-Datei angeben, zum Beispiel:

{ "config": { "vendor-dir": "/var/lib/vendor", "bin-dir": "/usr/local/bin" }, "require": { "drush/drush": "dev-master" } } 

Die Installation erfolgt drushglobal mit minimalen Kopfschmerzen, wie /usr/local/binbereits im PATH enthalten sein sollte.


Oder wenn Sie den Pfad nicht in einer JSON-Datei fest codieren möchten (damit er von verschiedenen Diensten gemeinsam genutzt werden kann), gibt es sogar einen viel einfacheren Weg, wie von jonhattan vorgeschlagen :

  • VM Weg (als 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 
  • Travis CI Weg:

    COMPOSER_BIN_DIR=~/bin composer -nqq install --no-interaction --optimize-autoloader --prefer-source 

Anstelle von installkönnen Sie auch verwenden update.