在许多开发人员和环境共享的使用Composer的项目中,我需要动态设置composer.json
的vendor-dir
配置参数。也就是说,当composer install/update
启动时运行的脚本必须能够更改此条目的值:
//composer.json
"config": {
"vendor-dir": "/var/www/html/......",
我尝试了以下方法:
//composer.json
"scripts": {
"pre-install-cmd": "MyBundle\Composer\Hook::setVendorDir",
类Hook
具有以下方法:
//MyBundle/Composer/Hook.php
public static function setVendorDir(Event $event)
{
// ... some code set the $vendorDir variable here depending on many thing
$event->getComposer()->getConfig()->merge([
'config' => [
'vendor-dir' => $vendorDir
]
]);
// ...
}
结果是,文件autoloader.php
和composer
文件夹创建在正确的供应商目录中,但所有其他软件包仍安装在默认供应商目录中!
我提到的composer
文件夹只包含一些PHP文件(ClassLoader.php
、_autoload_*.php_
和LICENSE
)
注意:当我更改composer.json
中的vendor-dir
参数时,它可以完美地工作。
如何动态设置vendor-dir
,并在每次安装软件包时将其考虑在内
例如,您可以编写批处理脚本(Windows)或bash脚本(Linux),甚至可以编写PHP脚本,而不是运行composer install
的。脚本在composer.json
中设置正确的vendor-dir
,然后运行composer install
或其他任何程序。
要设置供应商目录,只需在脚本中运行:
composer config vendor-dir /your/path/to/your/vendor/dir
有关composer config
的更多信息,请参阅Composer文档。