dev依赖必须用--dev声明并部署时用composer install --no-dev剔除;仅本地开发、测试或构建使用的工具包如phpunit、debugbar等应置于require-dev;误装需手动调整composer.json后运行composer update --with-all-dependencies验证。

dev依赖不该出现在生产环境,Laravel 项目中必须用 --dev 明确声明,并在部署时用 composer install --no-dev 剔除。
哪些包该加 --dev?
只在本地开发、测试或构建阶段用到的工具类包,比如:
-
phpunit/phpunit(运行测试) -
barryvdh/laravel-debugbar(调试面板) -
laravel/pint或php-cs-fixer(代码格式化) -
mockery/mockery(单元测试模拟) -
orchestra/testbench(包开发时模拟 Laravel 环境)
只要不参与运行时逻辑(即 app/、routes/、config/ 中不 require/use 它),就该进 require-dev。
composer require 加错位置怎么改?
如果误用 composer require foo/bar 把开发包装进了 require,别删重装——直接改 composer.json 并重装:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 把
"foo/bar": "^x.y"从"require"块剪切到"require-dev"块 - 运行
composer update foo/bar --with-all-dependencies(强制按新位置解析依赖) - 验证:执行
composer show foo/bar,确认输出里有required: dev
注意:不要用 composer remove 再 require --dev,可能触发不必要的依赖回滚。
部署时漏掉 --no-dev 会怎样?
没加这个参数,Composer 会照常安装 require-dev 下所有包,带来三个实际问题:
- 体积膨胀:
vendor/多出几 MB 到几十 MB(尤其含二进制或文档的包) - 安全风险:
phpunit、debugbar等在生产环境暴露入口或反射能力,可能被利用 - 性能隐患:某些 dev 包的自动发现机制(如 PHPUnit 的扩展注册)会在容器启动时触发 autoload 扫描,拖慢响应
Laravel 的 APP_ENV=production 不会影响 Composer 行为——它只管环境配置,不控制依赖安装范围。
真正容易被忽略的是 CI/CD 脚本里的 composer install 命令:很多团队只写了一次命令,却没区分本地构建和线上部署场景。哪怕用了 Laravel Envoy 或 Envoyer,也得手动检查部署脚本是否带了 --no-dev。










