答案1
这就是 composer 的工作原理。如果你想要将某些内容添加到~/.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
,我怀疑这就是您想要的。
答案2
至于解决方法,要使用不在的 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"
}
}
由于它已经在 PATH 中了,因此可以drush
以最少的麻烦进行全局安装。/usr/local/bin
或者,如果你不想在 JSON 文件中对路径进行硬编码(以便可以在不同的服务之间共享),那么还有更简单的方法,如乔恩哈坦, 例如:
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
Travis CI 方式:
COMPOSER_BIN_DIR=~/bin composer -nqq install --no-interaction --optimize-autoloader --prefer-source
您还install
可以使用update
。