--no-scripts --no-plugins 是唯一安全起点,二者必须同时使用:前者禁用所有脚本钩子,后者跳过插件扫描与激活全流程,缺一不可。

composer install --no-scripts --no-plugins 是唯一安全起点
不加这两个参数,任何 Composer 命令都可能执行恶意脚本或插件钩子——不是“有可能”,而是默认就会。插件(如 hirak/prestissimo)和脚本(如 post-install-cmd)都能调用 exec()、写文件、发请求,且无需用户确认。
必须同时使用,缺一不可:--no-scripts 停掉所有 scripts 钩子;--no-plugins 跳过 PluginInterface::activate() 全流程,连扫描都不做。
-
--no-plugins必须紧接在子命令后,例如composer install --no-plugins --no-scripts✅;composer --no-plugins install❌(等价于composer --help) - CI 脚本里每一条
composer命令都得显式带上,不能依赖“没装插件”这种假设 - 用了
alias c='composer'或bin/composer包装脚本?要验证参数是否透传到真实二进制,否则形同虚设 - 运行后检查
vendor/composer/autoload_plugins.php是否为空,或composer diagnose --verbose末尾无Loading plugin日志,才算真正生效
禁用特定插件只能靠 extra.disabled-plugins(Composer ≥2.2)
想只停 phpstan/extension-installer 却保留 symfony/flex?--no-plugins 不支持这种粒度,唯一官方方式是配置 extra.disabled-plugins。
它只影响后续 install 或 update,不回滚已激活插件的副作用(比如 flex 已生成的 config 文件不会被删)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 包名必须写全、大小写敏感、无通配符:
"dealerdirect/phpcodesniffer-composer-installer"✅,"phpcodesniffer-composer-installer"❌ - 改完
composer.json后,必须执行composer install或composer update才生效,仅改 JSON 不起作用 - 该配置对未出现在
require或require-dev中的插件无效——它不是卸载指令,只是跳过激活 - 注释掉
"hirak/prestissimo": "^0.3"这一行?没用。vendor 目录里的类仍会被 autoload 加载,甚至触发Cannot redeclare class
临时验证某插件是否引发问题:重命名 vendor 目录最快
当 composer install 卡住、autoload 报错、或 CI 构建行为异常,又不想改配置、不清 lock 文件时,秒级验证法就是直接操作 vendor/。
原理很简单:Composer 扫描插件时会跳过带 .disabled 后缀的目录,且不修改 composer.lock。
- 找到插件路径,例如
vendor/dealerdirect/phpcodesniffer-composer-installer - 重命名为
vendor/dealerdirect/phpcodesniffer-composer-installer.disabled - 立刻执行
composer dump-autoload清掉 autoload 缓存,否则旧类映射还在 - 调试完恢复原名即可,不用
composer install,也不影响其他依赖
环境变量 COMPOSER_NO_PLUGINS=1 更隐蔽,也更危险
它效果等同于 --no-plugins,但全局生效、难以追踪,容易在团队协作中被忽略。
适合隔离构建环境(如 Docker 构建阶段),但绝不该写入 ~/.bashrc 或开发机全局配置——本地开发时可能意外失效,且没人知道为什么 hirak/prestissimo 加速突然没了。
- 生效范围是当前 shell 会话及所有子进程,包括
php composer.phar -
composer diagnose会提示 “plugins disabled”,但这只是状态反馈,不说明是谁设的、为何设的 - CI 中若用
ENV COMPOSER_NO_PLUGINS=1,需同步在 README 和构建文档里明确标注,否则新人接手时极易踩坑 - 别和
COMPOSER_DISABLE_PLUGINS=1混用——后者仅跳过加载,不保证完全不执行;前者才是强制跳过全生命周期
symfony/flex 不再注入 recipes、phpcodesniffer-composer-installer 不再自动注册标准——这些不是故障,而是你主动切断了它们的执行链。

















