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

Composer php composer.json:通过脚本动态更改供应商目录,composer-php,Composer Php,在许多开发人员和环境共享的使用Composer的项目中,我需要动态设置Composer.json的供应商目录配置参数。也就是说,启动composer安装/更新时运行的脚本必须能够更改此项的值: //composer.json "config": { "vendor-dir": "/var/www/html/......", 我尝试了以下方法: //composer.json "scripts": { "pre-install-cmd": "MyBundle\\Compose

在许多开发人员和环境共享的使用Composer的项目中,我需要动态设置
Composer.json
供应商目录
配置参数。也就是说,启动
composer安装/更新
时运行的脚本必须能够更改此项的值:

//composer.json

"config": {
    "vendor-dir": "/var/www/html/......",
我尝试了以下方法:

//composer.json

"scripts": {
    "pre-install-cmd": "MyBundle\\Composer\\Hook::setVendorDir",
Hook
具有以下方法:

//MyBundle/Composer/Hook.php
公共静态函数setVendorDir(事件$Event)
{
//…一些代码根据许多情况在此处设置$vendorDir变量
$event->getComposer()->getConfig()->合并([
“配置”=>[
“供应商目录”=>$vendorDir
]
]);
// ...
}
结果是在正确的供应商目录中创建了文件
autoloader.php
composer
文件夹,但所有其他软件包仍安装在默认供应商目录中

我提到的
composer
文件夹只包含一些PHP文件(
ClassLoader.PHP
\u autoload\\\u*.PHP\uu
,以及
许可证

注意:当我在
composer.json
中更改
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配置的更多信息,请参见。

例如,您可以编写批处理脚本(Windows)或bash脚本(Linux),甚至可以编写运行的PHP脚本,而不是
composer安装
。脚本在
composer.json
中设置正确的
vendor dir
,然后运行
composer install
或其他任何程序

要设置供应商目录,请在脚本中运行:

composer config vendor-dir /your/path/to/your/vendor/dir

有关
composer config
的更多信息,请参阅。

谢谢您的回答。但是这对我来说不合适,因为composer.json处于版本控制之下,因为改变文件本身并不是我想要达到的目的。你可以在
composer安装后将其更改回原来的内容。无论如何,目前我看不到其他解决方案。当然,我可以,但是弄乱composer.json本身不够干净(例如,如果进程挂起,你会使用错误的文件)。而且,更重要的是,我真的需要实现一个干净的代码,当Composer被执行(操作配置)时,它可以正常工作。不知道这是否有效,但在第二个
composer.json中合并不受版本控制的可能是您的选择?当然,谢谢:)将在下一个项目中尝试!谢谢你的回答。但是这对我来说不合适,因为composer.json处于版本控制之下,因为改变文件本身并不是我想要达到的目的。你可以在
composer安装后将其更改回原来的内容。无论如何,目前我看不到其他解决方案。当然,我可以,但是弄乱composer.json本身不够干净(例如,如果进程挂起,你会使用错误的文件)。而且,更重要的是,我真的需要实现一个干净的代码,当Composer被执行(操作配置)时,它可以正常工作。不知道这是否有效,但在第二个
composer.json中合并不受版本控制的可能是您的选择?当然,谢谢:)将在下一个项目中尝试!