Por que o diretório do fornecedor é perdido depois da atualização do compositor?

1

Eu tenho VM com o seguinte arquivo composer.json em /vagrant :

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

depois, quando executo composer update nessa pasta, ele está baixando os requisitos, mas para /vagrant/vendor , em vez de esperado diretório HOME local como de costume ( ~/.composer/vendor ).

Existe alguma razão e como consertar isso?

Estou usando:

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

no Ubuntu 15.04.

    
por kenorb 24.09.2015 / 19:25

2 respostas

2

É assim que o compositor funciona. Se você quiser algo adicionado a ~/.composer/vendor , deverá colocá-lo em ~/.composer/composer.json . Por padrão, o diretório do fornecedor será colocado ao lado do arquivo composer.json .

Você tem algumas opções aqui. O melhor é provavelmente dispensar apenas /vendor/composer.json e apenas executar composer global require "drush/drush": "dev-master" . Isso adicionará drush/drush a ~/.composer/composer.json e instalará. Você então terá um link simbólico para o diretório Drush em ~/.composer/vendor/bin , que é, eu suspeito, o que você está procurando.

    
por 25.09.2015 / 00:22
0

Quanto à solução alternativa, para usar o arquivo JSON que não está em ~/.composer/composer.json , o caminho do fornecedor pode ser especificado em config / vendor-dir , por exemplo:

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

que deve instalar drush em ~/.composer/vendor/drush/drush/drush , então a alteração apropriada na variável PATH precisa ser feita, por exemplo

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

Para torná-lo global (executando como root ), acho que /var/lib/vendor pode ser usado para vendor-dir e acrescentar o caminho adequado à variável PATH em um dos arquivos globais, como /etc/bash.bashrc ou /etc/profile , como alternativa, especifique bin-dir no arquivo JSON, por exemplo:

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

que instalará drush globalmente com uma dor de cabeça mínima, pois /usr/local/bin já deve estar no PATH.

Ou se você não quiser codificar o caminho no arquivo JSON (para que ele possa ser compartilhado entre diferentes serviços), existe uma maneira muito mais simples, como sugerido por jonhattan , por exemplo:

  • Caminho da VM (como 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:

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

Em vez de install , você também pode usar update .

    
por 25.09.2015 / 10:53