
composer config 命令仅修改 composer.json 或 auth.json 文件,不支持真正动态运行时配置;所有变更均落盘,所谓“动态”指通过命令快速增删改查配置项。
composer config 命令本身不支持“动态运行时修改配置”——它只修改 composer.json 或 auth.json 文件,或读取全局/本地配置,所有变更都会落盘。所谓“动态”,实际是指在不手动编辑 JSON 文件的前提下,用命令快速完成配置增删改查。
直接写入 composer.json 的 config 段,影响当前项目所有后续命令(如 install、update):
composer config repositories.packagist composer https://mirrors.aliyun.com/composer/
composer config platform.php 7.4.33(注意:该值必须是字符串,不能写 7.4)composer config prefer-stable true 和 composer config symlink true
composer config --unset repositories.packagist
⚠️ 注意:config 子键路径用点号分隔,嵌套

composer validate 确认 JSON 结构合法。
凭据类配置**绝不应写进 composer.json**,必须走 auth.json。使用 --auth 标志才能写入该文件:
composer config --auth http-basic.gitlab.example.com token my_personal_access_token
composer config --auth github-oauth.github.com abc123def456...
composer config --auth --list
⚠️ auth.json 默认权限为 600,若手动编辑后 chmod 错误,Composer 会静默忽略该文件——检查 ls -l $(composer config --home)/auth.json 是否可读即可。
Composer 查找配置顺序为:命令行参数 → 当前目录 composer.json → 当前目录 auth.json → 全局 auth.json → 全局 config.json(位于 composer config --home 目录)。这意味着:
config 可覆盖全局同名设置,例如全局设了 process-timeout,项目里再设一次就以项目为准--global 标志:composer config --global repo.packagist false(禁用 Packagist)composer install --no-scripts --no-plugins
⚠️ 全局 config.json 修改后,所有项目都会受影响,但不会自动同步到已有项目的 composer.json 中——两者完全独立。
遇到配置不生效?先排除这几点:
fxp-asset 写成 fxp-assets,Composer 不报错但忽略该配置composer config bin-dir "bin/" 必须加引号,否则 / 后内容丢失config 后,vendor/autoload.php 不会自动重生成,需手动 composer dump-autoload(仅当改了 autoload 相关配置时)composer config --list --format=json 输出合并后的最终配置,比 --list 更直观
{
"process-timeout": 300,
"use-include-path": false,
"preferred-install": "dist",
"sort-packages": true,
"github-protocols": ["https","ssh"],
"notify-on-install": true
}
真正容易被忽略的是:Composer 的很多行为(如是否走 HTTPS、是否启用插件)由配置驱动,但这些配置没有默认值提示,也不会在 composer.json 中自动生成——你得自己知道要配什么,然后手动敲出来。