composer vendor目录不可通过命令行参数临时更改,config.vendor-dir仅在vendor不存在时首次安装生效;必须删除vendor和composer.lock后重装,并同步更新autoload引入路径、bin目录、ide索引及ci脚本。

Composer 的 vendor 目录不能靠命令行参数临时改,也不能只改 composer.json 里的 config.vendor-dir 就生效——它必须在 vendor 不存在时首次安装才起作用,且后续所有路径引用、自动加载、二进制命令都得同步调整。
为什么 composer install -d /path 不会改变安装位置
-d 参数只影响 Composer 去哪读 composer.json 和 composer.lock,完全不控制写入位置。它等价于先 cd /path 再运行 composer install,vendor 还是落在原项目根目录下(或已配置的 vendor-dir)。
- CI 脚本里滥用
-d是高频翻车点:本地跑通,流水线却报Class not found,因为没配对vendor-dir - 想真换路径,唯一稳的方式是提前在目标项目的
composer.json中写死"config": {"vendor-dir": "third-party"} - 改完必须删掉整个
vendor目录和composer.lock,再跑composer install—— 已有结构不会被重排
改了 vendor-dir 后 autoload 为啥还报错
vendor/autoload.php 是生成时硬编码路径的入口文件。你改了 vendor-dir,但没重建 vendor,旧文件还在原处,PHP 仍按原来路径去找。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer dump-autoload不够——它只刷新类映射,不重建autoload.php和符号链接 - 代码里所有
require 'vendor/autoload.php'都得手动改成新路径,比如require 'third-party/autoload.php' - IDE(如 PHPStorm)默认只索引
vendor,需手动在 Settings → PHP → Include Paths 中添加新路径
installer-paths 配置写了却没反应?检查这三个硬条件
extra.installer-paths 不是“写了就生效”的配置,它依赖插件、包类型、完整重装三者同时满足。
- 项目必须已执行
composer require composer/installers(且版本 ≥ 2.0) - 目标包自身
composer.json中声明了匹配的type,比如"type": "wordpress-plugin";普通library类型完全不触发 - 必须删掉整个
vendor和composer.lock,再跑composer install—— 单独composer update xxx不会重走 installer 逻辑 - 路径值不能以
/开头(如/wp-content/plugins/xxx),否则 Composer 会静默跳过该条规则
全局共享 vendor 路径:用 COMPOSER_HOME + config.json
项目级 composer.json 中的 config.vendor-dir 是被 Composer 明确忽略的——这个字段只在全局或系统级配置中有效。
- 先设环境变量:
export COMPOSER_HOME="/opt/my-composer-home"(Linux/macOS)或setx COMPOSER_HOME "C:\my-composer-home"(Windows) - 然后在
$COMPOSER_HOME/config.json中写入:{"config": {"vendor-dir": "/opt/shared-vendor"}} - 之后所有
composer install都会把包装进/opt/shared-vendor,而非当前项目的vendor - 注意:
COMPOSER_HOME单独设置无效,必须配合其下的config.json才能接管vendor-dir
最容易被忽略的是 bin 文件路径和 autoload 引用的同步更新——它们不是自动适配的,改了 vendor 位置,脚本、CI、IDE、甚至 phpunit 命令调用都会断,而且错误信息往往不直接指向根源。










