composer 2.0+ 中 config.vendor-dir 已彻底失效,唯一有效方式是环境变量 composer_vendor_dir;它全命令生效、支持相对/绝对路径,但需同步更新 autoload 引用及工具配置。

composer.json 里写 "vendor-dir" 已经失效了
Composer 2.0+ 版本中,config.vendor-dir 配置项已被彻底废弃。你往 composer.json 里加 {"config": {"vendor-dir": "lib/vendor"}},Composer 不但不会照做,还会在运行时输出警告:The "config.vendor-dir" option is deprecated, use the "COMPOSER_VENDOR_DIR" environment variable instead.。旧教程里这招现在纯属白忙活——删了旧 vendor/、改了配置、再跑 composer install,结果包还是老老实实装进默认 vendor/ 目录。
真正有效的只有 COMPOSER_VENDOR_DIR 环境变量
这是当前唯一被全命令支持、且优先级最高的方式。它对 install、update、require、dump-autoload 全部生效,而且支持相对路径和绝对路径。
- Linux/macOS 临时使用:
COMPOSER_VENDOR_DIR=third-party composer install - Windows PowerShell:
$env:COMPOSER_VENDOR_DIR="third-party"; composer install - Windows CMD:
set COMPOSER_VENDOR_DIR=third-party && composer install - 永久生效:把
COMPOSER_VENDOR_DIR加进 shell 配置(如~/.zshrc)或系统环境变量,重启终端/IDE 后所有命令都走新路径
注意:路径值可以是 third-party(相对)或 /mnt/d/shared/vendor(绝对),但别用带空格的路径,除非加引号包裹,比如 COMPOSER_VENDOR_DIR="/opt/my libs/vendor"。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
改了路径,autoload.php 还是报错?因为你没改代码里的 require
COMPOSER_VENDOR_DIR 只控制安装位置,不改你的 PHP 代码。只要入口文件里还写着 require 'vendor/autoload.php';,就会直接报 Fatal error: require(): Failed opening required 'vendor/autoload.php'——因为那个文件现在在 third-party/autoload.php。
- 最稳妥的写法是动态拼接:
$vendorDir = getenv('COMPOSER_VENDOR_DIR') ?: 'vendor'; require __DIR__ . '/../' . $vendorDir . '/autoload.php'; - CI 脚本、Dockerfile、
vendor/bin/下的可执行文件引用(比如vendor/bin/phpunit)也得同步改成third-party/bin/phpunit - PHPStorm 默认只索引
vendor/,需手动在 Settings → PHP → Include Paths 中添加新路径
别碰全局 config.json 里的 vendor-dir
有人把 vendor-dir 写进 $COMPOSER_HOME/config.json(通常是 ~/.composer/config.json),以为能“一劳永逸”。结果是:所有没显式覆盖该配置的项目,全被拖进同一个 vendor 目录,协作时极易冲突,部署脚本也会莫名其妙失败。更糟的是,这种写法在 Composer 2.0+ 下同样触发弃用警告,且实际无效。
真正容易被忽略的点是:路径改了,但 autoload.php 的引用、IDE 的索引、CI 脚本里的 bin 路径,全都得手动同步——Composer 不会帮你补全这些。










