--no-plugins是唯一能彻底绕过所有插件加载的参数,它强制跳过pluginmanager::loadplugins()全流程,不读plugins配置、不扫描vendor插件、不调用activate(),连全局插件也一并跳过,漏掉即等同执行远程代码。

--no-plugins 是唯一能真正跳过所有插件加载的参数,不是“禁用”,而是彻底绕过 PluginManager::loadPlugins() 流程。漏掉它,哪怕只装了一个不可信插件,composer install 就等于执行远程代码。
为什么必须用 --no-plugins,而不是其他方式
环境变量(如 COMPOSER_NO_PLUGINS=1)或配置项(如 extra.disabled-plugins)都存在版本限制、作用范围窄或被绕过的风险。比如:
-
extra.disabled-plugins仅在 Composer ≥2.2 生效,且只对显式声明的插件起作用,对全局插件或未列名的插件无效 - 重命名
vendor/hirak/prestissimo目录只是让 autoload 找不到类,但下次composer install会立刻重新拉取并激活 - 注释掉
composer.json中的插件依赖后不运行composer update --lock,composer.lock和vendor/仍保留旧状态,插件照常运行 - 只有
--no-plugins强制跳过插件发现、实例化、PluginInterface::activate()全流程,连全局插件(~/.composer/vendor/)也一并跳过
--no-plugins 的正确位置和常见错位
这个参数必须紧接在主命令之后、其他选项之前,否则会被忽略或报错——Composer 解析时把它当作早期开关,决定是否初始化插件系统。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- ✅ 正确:
composer install --no-plugins、composer update --no-plugins --with-dependencies - ❌ 错误:
composer install --with-dependencies --no-plugins(旧版 Composer 可能静默忽略) - ❌ 错误:
composer --no-plugins install(等价于composer --help) - ⚠️ 注意:如果用了 wrapper 脚本(如
bin/composer),要确认它没硬编码--plugins或覆盖环境变量
--no-plugins 会影响哪些功能
它只跳过插件逻辑,不影响 composer.json 中的 scripts(那些得靠 --no-scripts 控制),也不影响 vendor/bin/ 下的可执行文件(如 php-cs-fixer)。
-
hirak/prestissimo:并行下载失效 → 回退串行,速度变慢但行为可预测 -
composer/installers:不再把 WordPress 插件装进wp-content/plugins/→ 全部落到vendor/ -
phpstan/extension-installer:扩展不会自动注册 →phpstan analyse可能报 “unknown rule” - 自定义 installer(如处理
.phar或私有协议):直接报错 “Could not parse version constraint”
CI/CD 和离线环境里必须加 --no-plugins
这不是可选项,是安全底线。CI 脚本里没加这个参数,等于给所有 PR 开后门;Docker 构建时依赖镜像预装插件,也不能靠“默认没装”侥幸。
- 加了
--no-plugins后,Composer 不读composer.json中的plugins配置,也不扫描vendor/目录下的插件包 - 离线环境若不加,
composer install会在解析阶段就因无法联网获取插件 metadata 而中断 - 想同时跳过脚本和插件?用
composer install --no-plugins --no-scripts,适合审计或最小化构建
真正容易被忽略的是 wrapper 脚本和参数顺序——哪怕 CI 配置写对了,bin/composer 内部若透传失败,--no-plugins 就形同虚设。










