安全部署应使用--no-plugins和--no-scripts跳过插件与脚本执行:前者禁用所有Composer插件以防恶意行为或构建异常,后者跳过composer.json中定义的生命周期脚本以避免非预期副作用;推荐组合为composer install --no-dev --no-plugins --no-scripts --optimize-autoloader。

这两个选项在安全部署时用来**跳过不可信或非必需的自动执行行为**,防止 composer install/update 过程中意外触发恶意或不稳定代码。
—no-plugins:禁用所有 Composer 插件
Composer 插件是通过 composer-plugin-api 扩展 Composer 行为的包(如 hirak/prestissimo 加速下载、beberlei/composer-monorepo-plugin 支持单体仓库)。它们会在安装/更新时自动加载并运行。
- 插件可能修改依赖解析逻辑、重写下载源、注入额外命令,甚至执行任意 PHP 代码
- 生产环境通常不需要插件功能;禁用后可避免因插件 bug 或被投毒导致构建失败或行为异常
- CI/CD 流水线或容器镜像构建中建议加上
--no-plugins,确保行为可重现且最小化攻击面
—no-scripts:跳过所有定义的脚本(scripts)
composer.json 中的 "scripts" 字段(如 "post-install-cmd"、"pre-autoload-dump")会在特定生命周期自动执行。这些脚本常用于生成 autoload 文件、清理缓存、运行迁移等。
- 脚本由项目维护者编写,但若依赖第三方包的脚本(如某些框架的 post-install 钩子),可能引入非预期副作用
- 部署时若只需获取依赖文件(如 vendor 目录),不需触发构建类操作,加
--no-scripts更安全、更轻量 - 配合
--no-dev和--optimize-autoloader使用,适合只部署生产代码的场景
安全部署推荐组合
在 CI 构建或生产部署阶段,推荐使用:
composer install --no-dev --no-plugins --no-scripts --optimize-autoloader- 避免 dev 依赖、插件、钩子脚本三类潜在风险点
- 确保 vendor 目录仅包含明确声明的生产依赖,且无任何自动执行逻辑干扰










