Composer 的 allow-plugins 白名单必须配置在项目根目录 composer.json 的 config.allow-plugins 字段中;支持 true(仅调试)、false(显式禁止)及对象形式精确放行,如 {"phpstan/extension-installer": true},全局配置无效。

Composer 的 allow-plugins 白名单在哪配
白名单配置写在项目根目录的 composer.json 里,不是全局配置,也不是通过命令行开关。从 Composer 2.2 开始强制启用插件白名单机制,没声明的插件直接被拒绝加载,报错类似:Plugin installation is disabled globally. Set allow-plugins in config to true or list specific packages。
实操建议:
- 打开项目根目录下的
composer.json - 在顶层对象中添加
"config"字段(如果不存在) - 在
config下添加"allow-plugins",值为布尔或对象
allow-plugins 的三种写法及适用场景
写成 true 是最粗放的方式,等同于关闭白名单检查,仅限本地开发临时调试;生产环境必须用精确匹配。
推荐写法是对象形式,按需放行:
{
"config": {
"allow-plugins": {
"phpstan/extension-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"ergebnis/composer-normalize": false
}
}
}
说明:
- 键名是插件包的完整
vendor/name,必须和composer show输出一致 - 值为
true表示允许该插件运行;设为false是显式禁止(防止继承父级配置) - 不出现的包默认被拒,哪怕它依赖了其他插件也不会自动透传
- 如果用了
composer create-project模板,模板里的composer.json必须已含白名单,否则初始化失败
常见报错和对应修复动作
错误信息如 The package "squizlabs/php_codesniffer" requires the plugin "dealerdirect/phpcodesniffer-composer-installer",但执行 composer install 却卡住——这不是插件没装,而是它没被白名单放行。
排查步骤:
- 运行
composer show dealerdirect/phpcodesniffer-composer-installer确认包已存在 - 检查
composer.json中allow-plugins是否包含该包名,注意大小写和斜杠方向 - 确认没有拼写错误,比如写成
dealer-direct或漏掉-composer- - 如果用的是 Composer 2.5+,
allow-plugins: true已被弃用,必须改用对象形式
全局配置 vs 项目配置的坑
有人试图在 ~/.composer/auth.json 或 COMPOSER_HOME/config.json 里配 allow-plugins,这是无效的。Composer 只读取当前项目的 composer.json 中的 config.allow-plugins。
唯一支持全局白名单的方式是:在用户级 config.json(路径可通过 composer config --list --global 查)中设置,但强烈不建议——不同项目依赖的插件冲突概率高,且上线部署时容易因缺失配置失败。
真正要记住的只有一条:每个需要插件的项目,都得自己在 composer.json 里明确定义 allow-plugins 对象。漏掉一个,CI 就会挂,而且错误提示不会告诉你缺哪个,只说“plugin not allowed”。











