Composer不支持为单个包自定义安装路径,但可通过composer/installers插件实现对WordPress插件、Drupal模块等特定type包的路径重定向;需在包中声明type字段,并可在根项目extra.installer-paths中配置自定义映射。

Composer 本身不支持为单个包自定义安装路径,但可以通过 composer/installers 插件实现对特定类型包(如 WordPress 插件、Drupal 模块等)的路径重定向。
启用 composer/installers 插件
该插件是事实标准,多数 CMS 相关包已声明兼容。你只需确保项目中启用了它:
- 运行
composer require composer/installers(推荐方式,自动启用) - 或手动在
composer.json的require中添加:"composer/installers": "^2.0"
依赖包需声明 type 字段
composer/installers 不直接识别包名,而是根据包的 "type" 值匹配预设规则。例如:
-
"type": "wordpress-plugin"→ 安装到wp-content/plugins/ -
"type": "drupal-module"→ 安装到web/modules/contrib/ -
"type": "typo3-cms-extension"→ 安装到public/typo3conf/ext/
你无法修改第三方包的 type,所以只能选用已正确定义 type 的包;若想为自己的私有包定制路径,需在它的 composer.json 中设置对应 type 并遵循命名规范。
自定义 type 映射(高级用法)
如果你有自定义类型(如 "type": "my-library"),可在根项目的 composer.json 中扩展映射:
{
"extra": {
"installer-paths": {
"custom/libraries/{$name}/": ["type:my-library"]
}
}
}
注意:
• {$name} 是包名(如 acme/my-tool)
• 路径必须以斜杠结尾
• 支持通配符如 ["vendor/acme/*"] 或 ["acme/my-tool"] 精确匹配
不推荐:强行改 vendor 目录结构
不要试图用符号链接、post-install-cmd 脚本或修改 vendor-dir 来“移动”单个包——这会破坏自动加载、版本锁定和依赖解析,Composer 也不保证此类操作的稳定性。










