composer install --no-dev是最直接的生产环境部署方式,它跳过require-dev依赖仅安装核心包,避免增大镜像、延长构建及安全风险,且不修改composer.lock。
composer
install --no-dev 是最直接的解决方式
生产环境部署时,
默认会安装
和
里的所有包。加
参数就能跳过开发依赖,只装
中声明的核心依赖。
这个参数在 CI/CD 流水线、Docker 构建、线上服务器部署中必须用,否则可能引入
、
、
等非运行时必需的包,增大镜像体积、延长构建时间,甚至带来安全风险。
它不会修改
,只是跳过安装
下的包
如果本地
是带 dev 包生成的,
仍能正确读取并仅安装 production 部分
CI 脚本里建议固定写成
为什么不能靠删掉 composer.
js
on 里的 require-dev 来规避?
手动删
字段看似“一劳永逸”,但实际会破坏协作一致性:
仍记录着 dev 包的版本和哈希,下次有人执行
或
(无
)就会还原回去
Git 提交删掉
会导致团队成员本地开发时缺失测试工具,
找不到、
报错
某些包(如
)虽在
,但被
引用,删了字段会让
失败
如何确保 build 阶段一定不装 dev 包?
光靠人工加参数不可靠,尤其在自动化流程中。推荐三重保险:
Docker Sandbox
创建并管理 Docker 沙箱虚拟机环境以安全执行代理。适用于运行不受信任代码、探索包或隔离代理工作负载。支持 Claude、Codex、Copilot、Gemini 和 Kiro 代理,并提供网络代理控制。
下载
在
的
段加上
(可选),配合
进一步防止因扩展检测误触发 dev 工具
Dockerfile 中明确使用
,避免继承基础镜像的默认行为
CI 配置(如 GitHub Actions)里检查是否漏掉
:可用
做前置校验
composer create-project 怎么跳过 dev 包?
用
拉新项目时,默认也会装
。想一步到位,得加两个参数:
:跳过开发依赖安装
:删掉 .
git
目录,避免把模板仓库的提交历史带进来(常被忽略)
完整命令示例:
注意:
本质是 clone + install,所以
生效时机和
一致——它控制的是后续的依赖安装阶段,不是 clone 阶段。
真正容易被忽略的是:有些项目在
脚本里又偷偷调用了
(没带
),这时得去查
段并手动 patch。
composer installrequirerequire-dev--no-devrequirephpunitfakerphp/fakersymfony/var-dumpercomposer.lockrequire-devcomposer.lock--no-devcomposer install --no-dev --no-interaction --optimize-autoloaderrequire-devcomposer.lockcomposer updatecomposer install--no-devrequire-devphpunitphpcslaravel/pintrequire-devscriptscomposer runcomposer.jsonconfig"platform": {"ext-xdebug": "0"}--no-devRUN composer install --no-dev --no-interaction --optimize-autoloader--no-devgrep -q "\-\-no-dev" composer-install-command.shcomposer create-projectrequire-dev--no-dev--remove-vcscomposer create-project laravel/laravel myapp --no-dev --remove-vcscreate-project--no-devinstallpost-create-project-cmdcomposer install--no-devscripts