Composer依赖项目的installer-paths配置未生效问题咨询
解决Composer依赖项目的installer-paths不生效问题
这个问题的核心原因很明确:Composer的extra.installer-paths配置仅在根项目(也就是你执行composer install的第二个项目)中生效,依赖项目(第一个项目)里的这个配置不会被自动读取或合并。所以即使第一个项目定义了路径规则,第二个项目作为根项目,默认只会用自己的配置(或者无配置时使用默认路径)。
要让第一个项目的配置控制安装路径,不需要在第二个项目里覆写配置,推荐使用wikimedia/composer-merge-plugin来合并依赖项目的composer.json配置,具体步骤如下:
步骤1:在第二个项目中安装合并插件
执行以下命令安装插件:
composer require wikimedia/composer-merge-plugin:^2.0
步骤2:配置第二个项目的composer.json以合并第一个项目的配置
在第二个项目的composer.json中添加merge-plugin的配置,指定要合并第一个项目的composer.json,并且开启extra配置的深度合并:
{ // 保留原有配置内容... "extra": { "merge-plugin": { "include": [ "vendor/myusername/composer_test/composer.json" ], "merge-extra": true, "merge-extra-deep": true } } }
步骤3:重新执行安装命令
现在执行composer install或者composer update,插件会自动把第一个项目里的installer-paths配置合并到第二个项目中,Drupal Core就会按照第一个项目指定的web/core路径安装了。
额外说明
- 如果你把第一个项目的类型从
project改成library,会更符合Composer的依赖规范(project类型通常作为根项目使用),不过这不是必须的,只要合并插件能正确读取它的composer.json即可。 - 合并插件同样会处理
minimum-stability和prefer-stable这类配置的合并,确保依赖版本规则和第一个项目保持一致。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

