composer config 默认修改当前项目 composer.json 的 config 字段,加 --global 才改全局配置;github-oauth 等认证类配置必须用 --global,项目级设置无效,且项目级 repositories 会完全屏蔽全局源。

项目内设置无效,不是配置没写对,而是你根本没在项目级生效的上下文中操作——composer config 默认改的是当前目录下的 composer.json,不是全局配置文件;反过来,composer config --global 写的配置,在有 composer.json 的项目里大多数字段压根不参与决策。
为什么 composer config 不加 --global 会改错地方
这条命令默认作用域是当前项目,也就是往 composer.json 的 config 字段里塞东西。如果你本意是调全局镜像或超时时间,却漏了 --global,结果就是:配置被写进项目文件,但可能根本不是你想要的字段(比如写成 "config": {"process-timeout": 300}),而这个字段在项目中又不被支持,最终静默丢弃。
-
composer config repos.packagist.org.url https://mirrors.aliyun.com/composer/→ 写进当前composer.json,但项目级repositories字段会整块覆盖全局源,这行等于白写 -
composer config github-oauth.github.com xxx→ 没加--global,只对当前项目生效,且认证类配置在项目级设了也无效(必须全局) - 验证方式:运行
composer config --list(不带-g),看输出里有没有你刚设的项;如果有,说明它真被写进了项目文件
哪些配置项在项目里写了也白写
Composer 对不同配置字段的加载逻辑完全不同。有些字段只认全局,项目级声明直接被忽略;有些则只在无项目上下文时才读全局值。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 必须用
--global才有效的:github-oauth、http-basic、cache-dir、process-timeout、secure-http—— 这些控制底层网络和认证行为,项目无法覆盖 - 看似能全局设、实则受限的:
minimum-stability、prefer-stable、platform—— 一旦项目composer.json里出现同名字段,全局值立刻失效 - 完全不支持全局的:
autoload、require、scripts、bin—— 设了也会被静默丢弃,只允许出现在项目级
项目级 repositories 一写就屏蔽全局镜像
这不是“优先级更高”,而是彻底替换。只要 composer.json 里存在 "repositories" 字段(哪怕只是空数组 [] 或 {}),Composer 就不再合并或继承全局 repositories 配置,而是直接用项目定义的数组。
- 常见错误:只写了
"repositories": [{"type": "composer", "url": "https://my-private-repo.com"}],忘了加{"packagist.org": false}和回退官方源,结果连monolog/monolog都拉不到 - 正确顺序必须是:私有源 →
{"packagist.org": false}→ (可选)手动加回官方源:{"type": "composer", "url": "https://packagist.org/"} - 验证当前实际生效的源:运行
composer config repositories,输出必须和你写的composer.json完全一致,不能靠composer config --global repositories.packagist.org来判断
改完不生效?先清缓存再查路径
缓存脏、路径错、终端没重启,三者任一都会让配置“看起来改了,实际没用”。尤其 Windows 下 Git Bash 和 PowerShell 对 %APPDATA% 展开行为不一致,极易写错位置。
- 确认真实全局配置路径:运行
composer config --global --list --verbose,第一行 “Global configuration file” 显示的路径才是 Composer 实际读取的位置 - 清缓存不是可选项:
composer clear-cache必须执行,否则旧 packages.json 仍被复用;更彻底的刷新元数据要用composer update --refresh(≥2.5)或手动删$(composer config --global cache-dir)/repo/下对应镜像目录 - Windows 用户特别注意:
COMPOSER_HOME必须设为绝对路径(如C:\Users\YourName\AppData\Roaming\Composer),不能用%APPDATA%\Composer—— Composer 自己不解析环境变量
真正容易被忽略的点是:配置是否生效,不能只看 composer config --list 输出,得看 composer install -vvv 日志里真实的 Downloading URL;也不能只信命令没报错,因为 Composer 大量错误是静默丢弃而非报错提示。










