vendor-dir 配置仅在全局 config.json(COMPOSER_HOME/config.json 或 /etc/composer/config.json)生效,项目级 composer.json 中设置无效;修改后需同步更新 require 'vendor/autoload.php' 为绝对路径,并确保目标目录存在、可写且 COMPOSER_HOME 已正确配置。

vendor-dir 配置只在全局 config.json 里生效
项目级 composer.json 中写 "config": {"vendor-dir": "lib/vendor"} 完全无效 —— Composer 明确忽略它。这不是 bug,是设计限制。真正起作用的只有两个位置:COMPOSER_HOME/config.json(推荐)或系统级 /etc/composer/config.json。
必须分两步走:
- 先设环境变量
COMPOSER_HOME指向自定义目录(如/opt/my-composer) - 再在该目录下创建
config.json,内容为:{"config": {"vendor-dir": "/opt/shared-vendor"}}
之后所有 composer install 都会把包装进 /opt/shared-vendor,而非当前项目下的 vendor。
require 'vendor/autoload.php' 会直接报错
改完 vendor-dir 后,require 'vendor/autoload.php' 必然失败,因为 autoload.php 文件本身被生成到了新路径(如 /opt/shared-vendor/autoload.php),而代码里还硬编码着旧路径。
你必须手动改所有 require 语句:
- 旧写法:
require 'vendor/autoload.php'; - 新写法:
require '/opt/shared-vendor/autoload.php';(绝对路径更稳)
composer dump-autoload 不解决这个问题——它只刷新类映射文件(如 autoload_classmap.php),不重写 autoload.php 的引导逻辑。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
离线环境下更要避免软链接陷阱
如果用 path 类型仓库或开发模式依赖本地包,Composer 默认在 vendor/ 下建软链接(Linux/macOS)或复制(Windows)。但离线机上一旦源路径不存在、权限不对、或挂载点变化(比如 Docker 卷路径变更),vendor/ 里的链接就失效,运行时抛 Class not found。
稳妥做法是:
- 离线前,在联网机上用
composer install --no-dev --prefer-dist确保所有依赖都是 dist 归档解压出来的静态文件 - 禁用
path仓库,改用完整打包的vendor/目录迁移 - 若必须用
path,确保目标机上该路径存在、可读、且与repositories.url完全一致(注意 Windows 斜杠方向)
COMPOSER_DISABLE_NETWORK=1 不能绕过 vendor-dir 验证
即使设了 COMPOSER_DISABLE_NETWORK=1,只要 vendor-dir 配置错误或目标路径不可写,composer install 仍会失败,报错类似 Could not create directory /opt/shared-vendor 或 Permission denied。
离线部署前务必验证:
- 目标路径存在且 PHP 进程有写权限
-
COMPOSER_HOME已导出(Linux/macOS)或设置(Windows) - 全局
config.json语法正确(可用composer config --list查看是否生效)
最容易被忽略的是:改了 vendor-dir 后,composer global require 的命令也会受影响——它的 bin 脚本可能被装到新路径下的 bin/ 子目录,而不在原来的 ~/.composer/vendor/bin。

















