disabled-plugins是composer≥2.2唯一支持按名禁用指定插件的官方方式,需在composer.json的extra字段中以vendor/name格式精确声明,仅影响后续install/update,不触发插件activate()。

composer.json 中用 disabled-plugins 精确禁用指定插件
Composer ≥2.2 支持在 composer.json 的 extra 字段中声明要跳过的插件,这是唯一能「按名禁用」而非「全关」的官方方式:
{
"extra": {
"disabled-plugins": [
"hirak/prestissimo",
"phpstan/extension-installer"
]
}
}
它只影响后续 composer install 或 composer update,不会删除已安装的插件代码,也不会触发任何插件的 activate() 方法。注意:disabled-plugins 值必须是完整包名(vendor/name 格式),大小写敏感;如果插件未出现在 require 或 require-dev 中,该配置无效。
临时绕过某插件:重命名 vendor/ 下对应目录
当需要快速验证某个插件是否引发问题(比如 composer install 卡住、autoload 异常),又不想改配置或清 lock 文件,直接操作 vendor 最快:
- 找到插件路径,例如
vendor/myorg/my-composer-plugin - 重命名为
vendor/myorg/my-composer-plugin.disabled - 运行
composer dump-autoload清掉缓存(否则旧 autoload 条目可能还在)
Composer 在扫描插件时会跳过带 .disabled 后缀的目录,且不影响 composer.lock 内容。调试完改回原名即可,无需重新 install。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
COMPOSER_DISABLE_PLUGINS=1 和 COMPOSER_NO_PLUGINS=1 的区别
两个环境变量都禁用插件,但生效层级不同:
-
COMPOSER_DISABLE_PLUGINS=1:仅跳过插件加载阶段,部分插件(如phpstan/extension-installer)会检查该变量并主动退出,但不保证所有插件都响应 -
COMPOSER_NO_PLUGINS=1:等效于命令行加--no-plugins,强制 Composer 完全跳过插件发现、实例化、activate()调用全流程,更彻底
CI 脚本里推荐用 COMPOSER_NO_PLUGINS=1,因为它不依赖插件自身逻辑,也不受参数位置影响;本地调试若只想试某一个插件,优先用 disabled-plugins 配置,避免污染全局环境。
为什么不能靠注释 require 行来“禁用”插件
常见错误:把 "hirak/prestissimo": "^0.4" 这行注释掉,就以为插件停了——其实没用:
- 注释后不执行
composer update,vendor/里插件文件仍在,autoload 仍可加载其类 - 插件可能已被其他包间接 require,删
require行反而导致composer update报错 - 即使删干净,
vendor/composer/autoload_plugins.php可能还保留着旧注册信息,下次dump-autoload就恢复
真正想让插件失效,要么走 disabled-plugins 配置,要么用 --no-plugins 或对应环境变量——别碰 require 行,那属于卸载范畴,不是禁用。










