composer 2.0+ 已彻底移除 config.vendor-dir,必须改用环境变量 composer_vendor_dir;2.2+ 不再识别 repo.packagist 键名,须改用 repositories.packagist.org;self-update 命令在 2.5.0+ 中被移除,插件需适配 v2 api。

config.vendor-dir 被彻底移除,改用 COMPOSER_VENDOR_DIR 环境变量
Composer 2.0+ 已完全删除 config.vendor-dir 配置项。你在 composer.json 里写 "vendor-dir": "lib/vendor" 不仅无效,还会触发明确警告:The "config.vendor-dir" option is deprecated, use the "COMPOSER_VENDOR_DIR" environment variable instead.。这不是读取失败,而是 Composer 主动跳过该字段。
正确做法是通过环境变量控制:
-
export COMPOSER_VENDOR_DIR=lib/vendor(Linux/macOS) -
set COMPOSER_VENDOR_DIR=lib\vendor(Windows CMD) - 它对
install、update、require全部命令生效,优先级高于任何项目或全局配置 - 路径支持相对和绝对形式,但需同步更新
autoload引用、IDE 索引及所有硬编码的vendor/路径
repo.packagist 键名失效,必须改用 repositories.packagist.org
Composer 2.2+ 不再识别 repo.packagist 这个键名。旧写法如 "repo.packagist": {"url": "...", "type": "composer"} 会被静默忽略,导致镜像配置不生效——你改了却仍卡在 packagist.org 解析上。
新写法只有两种可靠形式:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 顶层单点声明:
"repositories.packagist.org": {"url": "https://mirrors.aliyun.com/composer/"} - 数组式 fallback(兼容 1.x):
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] - 两者不能混用;若已存在
repositories数组,升级后需删掉它,否则repositories.packagist.org可能被降级为普通源
self-update 命令在 2.5.0+ 中被彻底移除
执行 composer self-update 会直接报错:Command "self-update" is not defined。这不是权限或网络问题,而是设计层面移除——Homebrew 2.5.0+ 同样移除了该功能。
替代方案只有两个:
- 手动下载覆盖:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"+ 校验 SHA384 后运行 - CI 或脚本中显式指定版本:
php composer.phar self-update --1或--2,避免自动升级引发断层
plugins 字段和部分插件 API 已不可用
Composer 2 默认启用插件沙箱,且要求插件声明 "composer-plugin-api": "^2.0"。以下常见插件在 v2 中已失效:
-
hirak/prestissimo:静默跳过,不再加速下载 -
fxp/composer-asset-plugin:完全不兼容,需迁移到npm+asset-packagist.org - 任何直接调用
Composer\Package\Version\VersionParser等 v1 内部类的私有 installer
另外,config.plugins 字段本身未被废弃,但若插件未适配 v2,则即使开启也无效果——检查方式是运行 composer show --plugins,看输出是否包含你的插件名及对应版本号。
composer.json 里残留的 config.vendor-dir 和 repo.packagist 字段,它们不会报错,但也不起作用,反而掩盖真正生效的配置。










