Composer 2.2+ 默认禁用所有插件,必须在 composer.json 根级显式声明 allow-plugins 数组列出可信插件名(大小写敏感、无通配符),否则 composer install 直接失败。

Composer 2.2+ 默认禁用所有插件,allow-plugins 不是“教程开关”,而是你必须显式声明信任哪些插件,否则 composer install 直接失败。
为什么 composer install 突然报错 “Plugin installation is disabled”
这是 Composer 从 2.2 开始的强制安全策略:不再自动执行 composer.json 里 require-dev 或 require 中任何带 type: composer-plugin 的包。哪怕它只是 phpstan/extension-installer 或 hirak/prestissimo(已废弃但残留)也会被拦。
常见错误现象:
-
Your requirements could not be resolved to an installable set of packages.(实际原因藏在 verbose 日志里) - 运行
composer install -v后看到:Plugin installation is disabled. You must explicitly allow plugins via allow-plugins in composer.json or config.allow-plugins in composer.conf -
composer update成功,但composer install在 CI 或新机器上失败——因为composer.lock记录了插件,而本地没授权
怎么在 composer.json 里正确配置 allow-plugins
必须写在根级,不是 config 下,也不是 extra 里。值是一个布尔值或字符串数组:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"allow-plugins": true—— 全局放行(不推荐,等同倒退到 2.1 安全模型) -
"allow-plugins": false—— 彻底禁止(连官方维护的插件如composer/installers都不能用,多数项目不可行) -
"allow-plugins": ["phpstan/extension-installer", "dealerdirect/phpcodesniffer-composer-installer"]—— 推荐:只列你真实依赖且审计过的插件包名
注意:
- 包名必须和
composer show输出的 name 完全一致(包括 vendor 名),大小写敏感 - 不要写
*、vendor/*或正则——Composer 不支持通配符 - 如果用了
symfony/flex,它本身是插件,必须加入列表,否则composer install会跳过 recipe 执行
示例片段:
{
"name": "my/app",
"type": "project",
"allow-plugins": [
"phpstan/extension-installer",
"symfony/flex",
"dealerdirect/phpcodesniffer-composer-installer"
],
"require": {
"php": "^8.1",
"symfony/console": "^6.2"
},
"require-dev": {
"phpstan/phpstan": "^1.10",
"squizlabs/php_codesniffer": "^3.7"
}
}
CI/CD 和团队协作时最容易漏掉的点
allow-plugins 是 composer.json 的一部分,但很多人只改了本地配置,忘了提交——导致同事 git pull 后 composer install 立刻失败。
- 检查
composer.json是否已提交:运行git status确认该文件在暂存区 - CI 脚本里不要用
--no-plugins或--no-scripts绕过——这会让 flex、phpstan 自动加载失效,问题后移 - 如果用 Docker,确保基础镜像中 Composer 版本 ≥ 2.2(旧版 Alpine 的
apk add composer可能还是 2.1) - 升级 Composer 后首次运行
composer install,它不会自动补全allow-plugins字段,必须手动加
最常被忽略的是:插件名要和 packagist.org 上注册的完全一致,少一个字母、多一个空格、大小写错位都会拒绝加载——这时候 Composer 不会提示“找不到插件”,而是静默跳过,直到某个功能突然不工作才回头排查。

















