vendor目录不能直接移动、重命名或软链接,因autoload.php硬编码路径且composer.lock记录结构;composer 2.0+已废弃config.vendor-dir,唯一有效方式是使用环境变量composer_vendor_dir指定路径,并同步更新所有require语句及部署配置。

vendor目录不能直接移动,重命名或软链接都会出问题
手动 mv vendor lib/vendor 或加软链接 ln -s lib/vendor vendor 看似省事,实际会立刻引发类加载失败、Class not found、composer dump-autoload 报错找不到 vendor/autoload.php。因为 vendor/autoload.php 里硬编码了所有 PSR-4 映射路径和 classmap 文件位置,composer.lock 也记录了完整目录结构。强行挪动后,Composer 不会自动重写这些路径。
- 旧
vendor/目录必须手动删掉,不能留空壳 -
composer.json中的config.vendor-dir在 Composer 2.0+ 已废弃,设了会触发警告:The "config.vendor-dir" option is deprecated,且完全不生效 - 唯一有效方式是用环境变量
COMPOSER_VENDOR_DIR
改路径必须用 COMPOSER_VENDOR_DIR 环境变量
这是当前 Composer 唯一受支持、优先级最高、且无弃用风险的方式。它在命令执行时动态覆盖 vendor 路径,不污染配置文件,适合多环境切换。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:运行前执行
COMPOSER_VENDOR_DIR=lib/vendor composer install - Windows CMD:
set COMPOSER_VENDOR_DIR=lib\vendor && composer install - PowerShell:
$env:COMPOSER_VENDOR_DIR="lib\vendor"; composer install - 路径含空格或中文时,必须用引号包裹,例如
COMPOSER_VENDOR_DIR="lib/我的依赖"
中文路径下 vendor 安装失败?根本不是 Composer 的锅
报错类似 failed to open stream、Invalid argument、realpath(): No such file,基本可以确定是 PHP 底层在 Windows 上对 UTF-8 路径处理不稳定——尤其当终端代码页为 GBK(chcp 显示 936)而路径是 UTF-8 编码时,PHP 收到的是乱码字节流。
- 不要尝试在
COMPOSER_VENDOR_DIR里硬塞中文路径来“测试兼容性” - 真正可行的解法只有两个:彻底避开中文路径(推荐),或在 Windows 系统中启用长路径支持 + 将
COMPOSER_HOME显式设为纯英文路径(如C:\composer-home) - Docker 或 Linux 环境下中文路径通常能跑通,但 CI 流水线若用 Windows runner,仍可能因 agent 启动方式继承错误 codepage 而失败
改完路径后 autoload 和部署脚本必须同步更新
COMPOSER_VENDOR_DIR 只影响 Composer 自身行为,不会自动修复你代码里写的 require 'vendor/autoload.php',也不会让部署脚本、IDE 或 Web 服务器自动感知新路径。
- 所有硬编码路径都要手动改,比如从
require 'vendor/autoload.php'改成require 'lib/vendor/autoload.php' -
.gitignore里原来的/vendor行要改成新路径,例如/lib/vendor - 某些框架(如 Laravel)的
public/vendor符号链接需重建,且目标路径必须与COMPOSER_VENDOR_DIR一致 - PHPStorm 等 IDE 可能缓存旧 vendor 索引,改路径后需手动触发 “Reload project” 或清空索引
require 没跟上,或者 CI 环境漏设 COMPOSER_VENDOR_DIR,就会立刻崩。这不是配置问题,是路径契约被打破后的必然结果。










