使用 Composer 打包时应加 --no-dev 参数跳过开发依赖:install/update 时配合 --optimize-autoloader 和 --no-scripts 可精简生产环境;通过 platform 配置可防扩展冲突;Docker 构建中固化该参数确保镜像纯净。

如果您在使用 Composer 进行项目打包时希望仅安装生产环境必需的依赖,而完全跳过开发阶段所需的包(如 PHPUnit、PHP_CodeSniffer 等),则需要通过 --no-dev 参数控制依赖解析行为。以下是具体操作方式:
一、执行 composer install 时排除开发依赖
该方法适用于已存在 composer.lock 文件的项目,确保生产环境安装与开发环境一致的依赖版本,同时不引入 dev-require 中定义的包。
1、进入项目根目录,确认当前存在 composer.lock 文件。
2、运行命令:composer install --no-dev --optimize-autoloader。
3、Composer 将读取 composer.lock 中的 production 依赖列表,跳过所有 dev-require 声明的包,并启用类自动加载优化。
二、执行 composer update 时禁用开发依赖安装
该方法用于在更新依赖时强制忽略开发专用包,适用于需同步主依赖但不升级测试或构建工具的场景。
1、确保 composer.json 中的 require 和 require-dev 区分明确。
2、运行命令:composer update --no-dev --with-dependencies。
3、Composer 将仅更新 require 字段下的包及其传递依赖,不会解析或安装 require-dev 下的任何条目。
三、配置 composer.json 的 platform config 强制隔离环境
该方法通过预设平台配置,使 Composer 在解析依赖时主动忽略与开发环境强绑定的扩展或版本约束,增强生产打包稳定性。
1、在 composer.json 的 config 节点下添加 platform 配置:
2、插入以下内容:
"config": { "platform": { "ext-xdebug": "3.0.0", "php": "8.1.0" } }。
3、配合 --no-dev 使用,可防止因本地开发扩展(如 xdebug)引发的依赖冲突或误装。
四、使用 --no-scripts 联合 --no-dev 实现纯净部署
该方法用于彻底禁止执行 post-install-cmd、post-update-cmd 等脚本钩子,避免开发阶段注册的脚本在生产环境意外触发。
1、检查 composer.json 中 scripts 字段是否包含仅适用于开发的命令。
2、运行命令:composer install --no-dev --no-scripts --optimize-autoloader。
3、所有 require-dev 包被跳过,且所有 scripts 钩子均被静默忽略,autoloader 生成结果更精简。
五、构建 Docker 镜像时固化 --no-dev 行为
该方法将 --no-dev 作为构建流程固定环节,确保容器内环境始终不含开发依赖,符合不可变基础设施原则。
1、在 Dockerfile 中的 RUN 指令后添加 --no-dev 参数:
2、示例指令:RUN composer install --no-dev --optimize-autoloader --no-interaction。
3、配合 .dockerignore 排除 vendor 目录及 composer.lock 外的无关文件,保障镜像体积最小化。










