--no-plugins禁用所有插件以防止第三方扩展干预流程,--no-scripts跳过composer.json中定义的所有脚本执行;二者分层控制安全边界,常组合使用实现最小化执行。

这两个参数都用于限制 Composer 在安装或更新依赖时的自动行为,但作用对象不同,安全目标也略有差异。
--no-plugins:禁用所有插件
Composer 插件是第三方包提供的扩展机制,能 hook 到安装流程中(比如自动执行构建、修改 autoload、触发钩子等)。--no-plugins 会完全跳过插件的加载和执行,包括 composer/installers、ocramius/package-versions 或自定义插件。
适用场景:
- 在 CI/CD 环境中防止插件执行非预期操作(如调用外部 API、写入敏感路径)
- 调试依赖问题时排除插件干扰
- 审计阶段确保只运行核心逻辑,不引入第三方扩展行为
--no-scripts:跳过所有脚本(scripts)
Scripts 是 composer.json 中 "scripts" 字段定义的命令,例如 "post-install-cmd"、"pre-autoload-dump" 等。这些脚本由 Composer 自己执行(默认使用 PHP 进程),可能运行任意代码(如生成文件、清理缓存、执行测试)。
--no-scripts 不影响插件加载,但会跳过所有 script 阶段——哪怕插件注册了 script 钩子,也不会触发。
适用场景:
- 部署到生产环境时避免执行开发期脚本(如
dump-autoload --optimize或php artisan optimize) - 快速拉取依赖而不触发副作用(比如本地开发中跳过前端构建)
- 配合
--no-dev使用,进一步收紧执行范围
安全模式下的典型组合
真正“安全”的最小执行模式通常是:
composer install --no-plugins --no-scripts --no-dev --prefer-dist- 加上
--ignore-platform-reqs要谨慎,它绕过 PHP/扩展版本检查,可能引入兼容性风险
注意:--no-plugins 和 --no-scripts 都不阻止 autoload.php 的生成,也不影响依赖下载与解压本身——它们只约束“执行侧”行为。
基本上就这些。两者不是互斥,而是分层控制:插件是“谁可以干预流程”,脚本是“流程中该不该跑哪些命令”。安全加固时建议按需叠加,别默认全开。










