在使用Composer的项目中,由许多开发人员和环境共享,我需要动态设置 vendor-dir
composer.json
配置参数。也就是说,启动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
)
注意:当我更改vendor-dir
中的composer.json
参数时,它可以完美运行。
如何动态设置vendor-dir
并将其考虑在每个软件包安装中?
答案 0 :(得分:0)
你可以,例如编写批处理脚本(Windows)或bash脚本(Linux),甚至是运行<{>> composer install
的PHP脚本。该脚本在vendor-dir
中设置了正确的composer.json
,然后运行composer install
或其他任何内容。
设置供应商目录只需在您的脚本中运行:
composer config vendor-dir /your/path/to/your/vendor/dir
有关composer config
的详细信息,请参阅Composer documentation。