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 并遵循命名规范。
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(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 也不保证此类操作的稳定性。

















