composer.json:通过脚本动态更改vendor-dir

时间:2016-04-12 11:55:25

标签: composer-php

在使用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.phpcomposer文件夹在正确的供应商目录中创建,但所有其他包仍然安装在默认供应商目录中!

我提到的composer文件夹只包含一些PHP文件(ClassLoader.php_autoload\_*.php_LICENSE

注意:当我更改vendor-dir中的composer.json参数时,它可以完美运行。

如何动态设置vendor-dir并将其考虑在每个软件包安装中?

1 个答案:

答案 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