必须将composer.json中的vendor-dir配置同步迁移到新服务器,否则composer install会回归默认vendor目录,导致require 'vendor/autoload.php'报错;该配置需提交Git、确保缩进正确、使用相对路径,并配合手动更新所有autoload引入路径及CI/IDE配置。

composer.json 里的 vendor-dir 配置必须同步迁移到新服务器
旧服务器上改过 vendor-dir,新服务器上不手动复制这个配置,composer install 会直接回到默认 vendor/ 目录,导致所有 require 'vendor/autoload.php' 报错。这不是 Composer “忘记”了,而是它压根没读到你原来的配置。
检查点:composer.json 文件是否已提交 Git?如果没提交,旧服务器上那个 "config": {"vendor-dir": "lib/vendor"} 就根本不存在于代码库中。新服务器拉下来的项目,composer.json 里没有这行,自然不会生效。
- 确认
composer.json的config字段存在且缩进正确(不能在extra或scripts下) - 路径必须是相对路径,比如
"lib/vendor",不能写成"/var/www/myapp/lib/vendor"或$HOME/lib/vendor - 迁移前删掉旧
vendor目录;新服务器上首次运行composer install前,确保当前目录下没有残留的vendor/或lib/vendor/
COMPOSER_VENDOR_DIR 环境变量在新服务器上大概率失效
别再试 export COMPOSER_VENDOR_DIR="lib/vendor" —— 这个环境变量在 Composer 2.x 中已被移除,现在完全不识别。你设了也没用,composer install 依然按 composer.json 里的 config.vendor-dir 走,或者回退到默认值。
真正有效的环境变量只有 COMPOSER_HOME(管全局缓存和插件),但它不影响项目级 vendor 路径。想靠环境变量动态切换项目 vendor 目录?唯一可行的是用 COMPOSER_HOME + 全局 config.json,但这要求所有项目共用一个 vendor,不适合多数部署场景。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:检查
echo $COMPOSER_VENDOR_DIR是否有输出,有就立刻unset COMPOSER_VENDOR_DIR - CI/CD 脚本或 Dockerfile 中删掉所有
-e COMPOSER_VENDOR_DIR=...行,换成确保composer.json正确 - 如果确实需要多环境路径(如 Docker 容器内用
/tmp/vendor),改用构建时sed -i替换composer.json中的vendor-dir值,而不是依赖环境变量
autoload.php 和 bin 脚本路径要手动更新,IDE 和 CI 不会自动跟
vendor/autoload.php 是生成时硬编码路径的文件。你改了 vendor-dir,但 PHP 代码里还写着 require 'vendor/autoload.php',那就只能报 Fatal error: require(): Failed opening required 'vendor/autoload.php'。
同样,vendor/bin/phpunit 这类命令在 CI 脚本里写死路径的,也会变成 Command not found,因为新路径下是 lib/vendor/bin/phpunit。
- 全局搜索替换项目内所有
require 'vendor/autoload.php'→ 改成require 'lib/vendor/autoload.php'(路径与vendor-dir值一致) - 检查
composer.json的bin-dir是否同步配置,例如:"bin-dir": "lib/vendor/bin";否则软链接不会建到新位置 - PHPStorm 需手动进
Settings → PHP → Include Paths,删掉旧vendor,加新路径(如lib/vendor);否则代码补全和跳转会失效 - GitHub Actions / Jenkins 脚本中所有
vendor/bin/xxx调用,必须改成新路径,不能只改composer install命令
不要复制旧 vendor 目录,也不要指望 composer.lock 记录路径
composer.lock 只锁版本、哈希和依赖树,它不记录 vendor-dir。你把旧服务器上的整个 vendor/ 目录打包传到新服务器,几乎必然失败:autoload 文件里的绝对路径、shebang 行(如 #!/usr/bin/env php)、扩展编译产物、post-install-cmd 生成的资源,全都可能不兼容新环境。
常见错误现象:Class not found 却提示找不到某个接口类,实际是 autoloader 缓存了旧路径映射;或者 phpunit 执行时报 Failed to open stream: No such file or directory,因为脚本头行指向旧服务器的 PHP 解释器路径。
- 新服务器上第一件事:删掉任何已存在的
vendor/或自定义 vendor 目录 - 只保留
composer.json和composer.lock,运行composer install --no-dev(生产环境) - 如果旧服务器用了私有仓库或认证,先在新服务器运行
composer config --global http-basic.example.com token user,再装
vendor-dir 后,composer dump-autoload 不够用。它只刷新类映射,不重建 autoload.php 入口文件和 bin/ 下的符号链接。必须删 vendor + 重装,一步都不能少。

















