composer.json:通过脚本动态更改供应商目录



在许多开发人员和环境共享的使用Composer的项目中,我需要动态设置composer.jsonvendor-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.phpcomposer文件夹创建在正确的供应商目录中,但所有其他软件包仍安装在默认供应商目录中!

我提到的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文档。

相关内容

  • 没有找到相关文章

最新更新