必须手动删除旧vendor目录,否则新旧路径混用导致自动加载失败;COMPOSER_VENDOR_DIR优先级高于composer.json,但需确保Web/CLI环境均正确继承;bin-dir必须同步配置为新vendor下的子路径。

vendor-dir 配置后为什么旧 vendor 还在用?
改了 composer.json 里的 "vendor-dir",但 composer install 后旧 vendor/ 没删,新依赖却写进了新路径——PHP 自动加载仍找旧路径,报 Class not found。这不是 Composer 没生效,是它默认不清理旧目录。
必须手动删掉旧 vendor/ 目录再运行安装命令,否则 autoload 文件、符号链接、bin 脚本都可能混用两套路径,引发隐性冲突。
- 删前确认:
ls -la vendor和新路径(如lib/vendor)是否同时存在 - 删后验证:
composer install --dry-run看输出是否指向新路径 - CI/CD 中务必加
rm -rf vendor(或对应新旧路径),不能只靠composer update
COMPOSER_VENDOR_DIR 和 composer.json 冲突怎么办?
环境变量 COMPOSER_VENDOR_DIR 优先级高于 composer.json 里的 vendor-dir。如果两者指向不同路径,Composer 会按变量走,但项目里硬编码的 require 'vendor/autoload.php' 或 CI 脚本仍可能引用旧路径,导致运行时错位。
常见于 Docker 多阶段构建或 PHP-FPM 容器中:变量设了,但 Web 进程没继承到,结果 CLI 走新路径、Web 请求走默认 vendor/。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查是否生效:
php -r "echo getenv('COMPOSER_VENDOR_DIR');" - Web 环境下必须在服务器启动前注入,Apache 要用
SetEnv,PHP-FPM 要在www.conf的env[COMPOSER_VENDOR_DIR]里声明 - 开发时建议统一用
composer.json配置,环境变量仅用于部署态动态切换
多个项目共用 vendor 目录时怎么防冲突?
用 COMPOSER_HOME + 全局 config.json 实现共享 vendor-dir,看似省空间,但所有项目会往同一个目录装包——一旦某项目 composer update 升级了某个包,其他项目可能因类签名变更或 BC Break 突然挂掉。
这不是路径配置问题,是依赖隔离被主动破坏。Composer 本身不校验“谁装了什么”,只管当前请求能否满足约束。
- 共享路径只适合完全静态、只读、无更新需求的场景(如离线镜像)
- 若真要复用,必须配合
composer.lock锁死全部包版本,并确保所有项目使用同一份 lock 文件 - 更安全的做法是用
composer create-project --no-install+composer install --prefer-dist分离源与实例
bin-dir 不同步 vendor-dir 就会找不到命令
很多包(比如 phpunit、phpcs)在 composer.json 里声明了 "bin" 字段,Composer 默认把二进制文件软链到 vendor/bin/。你只改了 vendor-dir,没配 bin-dir,这些链接就全断了,执行 phpunit 时提示 Command not found。
bin-dir 必须显式设为新 vendor-dir 下的子路径,且不能是相对路径(Composer 不解析它)。
- 正确写法:
"config": {"vendor-dir": "third-party", "bin-dir": "third-party/bin"} - 错误写法:
"bin-dir": "bin"(会被解释为项目根目录下的bin/) - CI 脚本中所有
vendor/bin/*调用都得同步改成新路径,IDE 的外部工具配置也要更新
vendor-dir 移动的锚点。任何一处没对齐,就会在某个环节突然失效,而且错误现象分散(类找不到、命令找不到、IDE 提示错乱),排查成本远高于初始配置成本。

















