composer install本身不决定扩展文件安装路径,它只按composer.lock解压到vendor/;实际路径由包type和extra.installer-paths配置共同决定,需依赖composer/installers等插件在post-install-cmd阶段主动迁移。

composer install 本身不决定扩展文件“放哪”,它只按 composer.lock 里的记录把包解压进 vendor/,路径完全由包自身声明的 type 和项目里配置的 installer 决定。你看到的 wp-content/plugins/ 或 resources/nova/ 这类路径,不是 install 做的,是 installer 在解压后主动挪的。
为什么 composer install 不管安装路径?
因为 install 的职责很窄:读 composer.lock → 下载归档 → 解压到 vendor/ → 触发 post-install-cmd(如果有)。它不解析 type,也不查 installer-paths。这些规则生效的前提,是项目已装好对应 installer(比如 wpackagist/installer 或 composer/installers),且该 installer 注册了事件监听器。
常见错误现象:composer install 跑完,包还在 vendor/ 里没动——说明 installer 没装、type 不匹配,或 installer-paths 配置没生效。
- 运行
composer show看是否列出composer/installers或wpackagist/installer - 检查目标包在 Packagist 上的
type字段(比如wordpress-plugin) - 确认根项目
composer.json的extra.installer-paths键值对格式正确,路径末尾带斜杠
installer-paths 映射怎么写才生效?
映射必须满足三个条件:包的 type 被 installer 支持、路径模板里用 {$name} 或 {$vendor}、目标路径不能是 vendor/ 子目录(否则 installer 会跳过)。
示例有效配置:
{
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
"resources/nova/{$name}/": ["type:nova-component"],
"app/Extensions/{$vendor}-{$name}/": ["mycompany/*"]
}
}
}
注意点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
["type:wordpress-plugin"]是匹配条件,不是路径;["mycompany/*"]是通配 vendor/name,不是 glob 语法 -
{$name}是包名(如akismet),不是完整 vendor/name(wpackagist-plugin/akismet) - 路径必须以
/结尾,否则 installer 可能报错或静默失败
没声明 type 的私有包怎么安置?
私有包通常没设 type,或者设了个 installer 不认识的类型(比如 "type": "internal-tool")。这时得靠 composer/installers 的自定义 type 支持。
操作步骤:
- 在私有包的
composer.json里写"type": "myapp-tool" - 在根项目执行
composer require composer/installers - 在根项目
composer.json的extra里加:"myapp-tool": ["mycompany/*"]
关键细节:
-
composer/installers默认只认几十种公开 type,自定义 type 必须显式映射,否则直接忽略 - 映射值
["mycompany/*"]中的*是通配符,匹配任意包名,不是 shell 展开 - 如果多个包共用同一 type,它们会全部被挪到同一路径下,需靠
{$name}区分子目录
为什么有时 composer install 后路径还是错?
最常被忽略的是 installer 的执行时机:它只在 post-install-cmd 和 post-update-cmd 阶段触发,而 install 默认不运行这些脚本——除非你在 composer.json 里显式启用了 scripts 或用了 --no-scripts 以外的默认行为。
验证方式:
- 手动运行
composer run-script post-install-cmd,看是否完成挪动 - 检查
vendor/composer/installed.json里该包的install-path字段是否已更新为最终路径 - 删掉
vendor/和composer.lock,重新composer install,观察 installer 是否全程参与
真正起作用的从来不是 install 命令本身,而是它背后那一套 installer 插件链。路径安置不是默认行为,是 opt-in 的定制动作,漏掉任意一环都会回到 vendor/。










