composer 2.2+ 默认禁用插件,需在 composer.json 的 config.allow-plugins 中显式声明信任的插件包名(如 "phpstan/extension-installer": true),未列出者一律拒绝;禁用 --allow-plugins=true 或全局开启,以防执行恶意代码。

Composer 2.2+ 报错 “Plugin not allowed” 怎么办
Composer 2.2 起默认禁用所有插件,运行 composer install 或 composer update 时若遇到类似错误:
Plugin installation is disabled. You must explicitly allow plugins via config or --allow-plugins.
说明 Composer 拒绝加载 composer.json 中声明的插件(如 hirak/prestissimo、phpstan/extension-installer 等),不是权限问题,而是安全策略升级。
如何安全启用指定插件(推荐方式)
全局或项目级配置中,只显式允许你信任的插件,避免无差别开白名单。优先使用项目级配置(写入当前项目的 composer.json):
- 在
composer.json的根对象下添加"config"字段(若已存在则合并) -
"allow-plugins"值为对象:键是插件包名(如"phpstan/extension-installer"),值为true或false - 设为
false表示明确禁止,true表示允许;未列出的插件一律拒绝
示例(仅允许两个插件):
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
{
"config": {
"allow-plugins": {
"phpstan/extension-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true
}
}
}
改完后执行 composer install 即可继续——不需要加 --allow-plugins 参数,也不需要动全局配置。
为什么不要用 --allow-plugins=true 或全局配置
这两类操作会绕过插件白名单机制,带来实际风险:
-
composer install --allow-plugins=true:每次都要手动加参数,容易漏;且等于临时开放全部插件,包括未来新增的未知插件 -
composer config --global allow-plugins true:全局开启后,所有项目(包括克隆的第三方项目)都会无条件加载其声明的插件,可能执行恶意代码 - 某些插件会在安装时修改 vendor、写入文件甚至执行 shell 命令,白名单是唯一可控防线
常见插件名称怎么查
插件包名不是命令名,也不是类名,而是 composer.json 里 "name" 字段的值。查看方式:
- 进插件包的 GitHub/GitLab 主页,打开其
composer.json文件 - 或运行
composer show <vendor>/<package></package></vendor>(如composer show phpstan/extension-installer),输出中name行即为准确包名 - 注意大小写和斜杠方向:必须完全一致,
PHPStan/extension-installer和phpstan/extension-installer是不同的
别凭印象写,复制粘贴最稳妥。漏掉一个字符,插件就还是被拒,而错误提示不会告诉你具体是哪个包没匹配上。










