最常见原因是未安装composer/installers或目标包type不匹配:必须先执行composer require composer/installers,且包的composer.json中type需为wordpress-plugin等installer支持的类型,否则配置无效。

为什么 installer-paths 配置写了却没生效
最常见的情况是:你加了 extra.installer-paths,但包依然出现在 vendor/ 下——这几乎肯定不是语法写错,而是环境或逻辑没到位。
- 没装
composer/installers:这个插件是整个机制的前提,不运行composer require composer/installers,installer-paths完全被忽略 - 目标包的
type字段不匹配:比如你想定制monolog/monolog,但它在自己的composer.json里声明的是"type": "library",而composer/installers默认不接管library类型 - 路径值以
/开头或含非法字符:如"/wp-content/plugins/"或"wp-content\plugins\",Composer 会静默跳过该条规则 - 没清空旧环境:已安装的包不会被重定位,必须删掉
vendor/和composer.lock后执行composer install
怎么让 WordPress 插件装进 wp-content/plugins/
这是最典型的使用场景,依赖三方包的 type 声明和 composer/installers 的内置支持。
- 确认插件包(如
wpackagist-plugin/akismet)在 Packagist 上的type是wordpress-plugin - 在项目根目录执行:
composer require composer/installers - 在
composer.json的extra段添加:{"installer-paths": {"wp-content/plugins/{$name}/": ["type:wordpress-plugin"]}} -
{$name}会被自动替换为包名最后一段(acme/my-plugin→my-plugin),路径必须以/结尾且相对项目根目录
想把私有包单独装到 resources/js/vendor 怎么办
私有包通常没按生态规范设 type,得自己定义类型并映射路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在你的私有包(如
myorg/ui-kit)的composer.json中声明:"type": "myapp-ui" - 在项目根目录的
composer.json中确保已安装composer/installers - 在
extra下配两条:{"installer-paths": {"resources/js/vendor/{$name}/": ["type:myapp-ui"]},"installer-types": {"myapp-ui": "library"}} -
installer-types不是必须字段,但显式声明能避免某些版本兼容问题;路径中{$name}和{$vendor}都可用,但别混用斜杠风格
config.vendor-dir 和 installer-paths 能一起用吗
能,但没必要,而且容易混淆职责。两者解决的问题完全不同。
-
config.vendor-dir是全局搬家:所有包(包括composer/installers自身)都挪到新位置,影响autoload.php入口、bin/符号链接、IDE 索引路径 -
installer-paths是定向搬运:只对特定type的包生效,其余仍走vendor/,不改变 autoload 主入口 - 如果同时配置,
vendor-dir决定基础位置,installer-paths决定部分包是否“逃出”该目录——但实际中极少需要这种嵌套逻辑 - 硬编码路径(如
require 'vendor/autoload.php')必须随vendor-dir改动而手动更新,installer-paths不触发这类变更
真正容易被忽略的点在于:installer-paths 只在包首次安装或完整重装时起作用,它不移动已有文件,也不修正历史遗留的 require 路径。改配置后看到 vendor 里还有旧包,别怀疑配置,先删再装。










