生产环境应使用 composer install --no-dev 跳过开发依赖安装,推荐搭配 --optimize-autoloader 和 --classmap-authoritative 提升性能,并在 CI/CD 和 Dockerfile 中显式声明,避免安全风险与体积膨胀。
生产环境不应安装 --dev 标记下定义的依赖包,因为它们仅用于开发和测试,比如 PHPUnit、PHPStan、debug 工具等,不仅增加部署体积,还可能引入安全风险或运行时冲突。
Composer 默认在部署时会安装 require-dev 中的所有包。要避免这点,只需在生产环境执行:
composer install --no-dev:完全忽略 require-dev 区块,不安装任何开发依赖composer install --optimize-autoloader --no-dev:推荐组合,同时生成优化的类映射,提升加载性能Composer 会根据 COMPOSER_ENV 或 APP_ENV(Laravel 等框架)判断环境,但真正起作用的是 --no-dev 参数本身。即使 "config": {"preferred-install": "dist"} 或 "minimum-stability": "stable" 存在,也不影响 dev 包是否安装——关键还是命令行参数。
很多部署流程会在构建阶段运行 composer install,若未显式加 --no-dev,就会把 dev 包一起打进生产镜像或发布包。建议:
RUN composer install --no-dev --optimize-autoloader -
-classmap-authoritative
--no-dev
composer update 在生产服务器上执行,应只在本地或构建机更新 lock 文件上线前可快速检查:进入线上项目目录,运行
composer show --dev:应返回空或提示“no packages”,否则说明 dev 包被装进来了ls vendor/ | grep -E "(phpunit|psr/log|symfony/debug)":手动确认常见 dev 工具是否残留