composer 默认不支持自定义安装路径,必须通过 johnpbloch/custom-installer 插件实现:目标包需声明 type,主项目需在 extra.installer-paths 中配置 type 到路径模板(如 "public/wp-content/plugins/{$name}/")的映射,且路径须用 {$name} 等变量、结尾加斜杠、避免硬编码。

Composer 默认不支持自定义安装路径,必须靠插件实现
Composer 原生只把包装进 vendor/ 目录,composer.json 里的 install-path 字段(如写成 "install-path": "webroot/plugins/my-plugin")完全无效——它不会被识别,也不会报错,只是静默忽略。真要改路径,唯一靠谱方式是用 custom-installer 插件,且必须配合包的 type 字段一起用。
必须同时配置 package type 和 custom-installer 的映射规则
光装插件没用。你得让 Composer 知道:“这类包该装哪儿”。关键在两处:
- 目标包(即你要装到别处的那个包)的
composer.json中必须声明明确的type,比如"type": "wordpress-plugin"或自定义的"type": "my-module" - 主项目(使用该包的项目)的
composer.json中,要在require之外加extra配置,把type映射到路径模板,例如:"extra": { "installer-paths": { "public/wp-content/plugins/{$name}/": ["type:wordpress-plugin"], "modules/{$name}/": ["type:my-module"] } } -
custom-installer本身要出现在主项目的require-dev或require里:"cweagans/composer-patches": "^1.0"是常见误配,正确是"johnpbloch/custom-installer": "^2.0"(注意作者名和版本兼容性)
路径模板里不能硬编码 vendor 名称,要用 {$name} 或 {$vendor}
写死路径比如 "public/plugins/my-package/" 会导致所有同 type 包都挤进同一个目录,覆盖冲突。必须用变量:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
{$name}→ 解析为包名最后一段(如acme/my-plugin→my-plugin) -
{$vendor}→ 解析为 vendor 名(acme) -
{$type}→ 当前包 type(wordpress-plugin),一般不用在路径里 - 路径结尾建议加斜杠,否则可能生成无扩展名文件或权限异常
- 路径是相对于项目根目录的,不是
vendor/;public/wp-content/plugins/就是项目根下的public/wp-content/plugins/
常见失败原因:type 不匹配、插件未启用、路径含非法字符
装完包还在 vendor/?先查这三处:
- 目标包的
type值和主项目installer-paths里写的是否**完全一致**(包括大小写、连字符) - 运行
composer install后,检查输出里有没有Using custom installer提示;没有说明插件根本没生效,可能是版本冲突或 autoload 未加载 - 路径模板里避免空格、中文、emoji;Windows 下反斜杠
\会出错,一律用正斜杠/ - 如果用了 Composer 2.2+,确认
custom-installer版本 >= 2.1.0,旧版不兼容新钩子机制
路径逻辑只在 install/update 时触发,已装在 vendor 里的包不会自动搬走——得删掉 vendor/ 和 composer.lock 重来。










