--no-dev是唯一可靠方式,它彻底跳过require-dev包的解析、下载、安装及autoload注册,确保仅部署生产依赖;其他参数如--optimize-autoloader仅优化加载,不减少vendor中dev包。

直接加 --no-dev 就行,这是唯一可靠方式。 其他参数比如 --optimize-autoloader 或 --classmap-authoritative 都不跳过 dev 包,只优化加载——装完照样有 phpunit、larastan 这类包在 vendor/ 里。
为什么 --no-dev 是必须的,而不是可选的
Composer 默认行为是把 composer.json 里 require 和 require-dev 全部装上。--no-dev 不是“建议”,而是生产环境部署的硬性要求:它会彻底跳过 require-dev 字段中所有包的下载、解压、自动加载注册,连 vendor/autoload_static.php 里的 dev 映射都不生成。
- 漏加
--no-dev是线上镜像膨胀、autoload 冲突、甚至Class not found的常见源头 -
composer install -o(即--optimize-autoloader)只是让 autoloader 更快,dev 包照装不误 - 如果项目用了
autoload-dev注册了测试辅助类,又没装对应包,运行时调用就会直接报错
composer install --no-dev 的实际使用场景
这个命令只在有 composer.lock 的前提下才安全生效。它不是“过滤”,而是“按 lock 文件精确还原生产依赖”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- CI/CD 构建阶段:推荐组合使用
composer install --no-dev --optimize-autoloader --classmap-authoritative --no-scripts - Docker 构建:应在
RUN指令中明确写出--no-dev,别指望基础镜像默认带 - PHP-FPM 容器启动前:确保 autoload 已清理,避免测试类路径干扰运行时
- 千万别在生产机上跑
composer update—— 即使加了--no-dev,也会改composer.lock,带来不可控风险
检查是否真干净:别信感觉,要看 composer.lock
--no-dev 只控制安装行为,不修改 composer.json 或 composer.lock。但如果你之前没提交过 clean 的 lock 文件,它可能还残留 dev 包记录。
- 执行
grep -A 5 "require-dev" composer.lock,输出为空才说明 lock 文件本身已无 dev 条目 - 若输出非空,说明上次
composer update没加--no-dev,得先在开发环境跑一次composer update --no-dev并提交新 lock -
COMPOSER_DEV_MODE=0环境变量效果等同--no-dev,但不如参数直观,容易被忽略
真正容易被忽略的是 lock 文件状态和 autoload-dev 的残留影响——--no-dev 装得再干净,如果 lock 里还有旧 dev 记录,下次有人不加参数 install,就全回来了。










