加--dev参数才能将包安装到require-dev;已有生产依赖移至require-dev需三步:剪切配置、composer update --no-install、composer install;--no-dev部署时不会加载require-dev包,但需检查autoload_classmap.php确认。

composer require 时加 --dev 参数才能进 require-dev
直接运行 composer require vendor/package 默认会写入 require,哪怕你当前只是临时需要它做开发调试。想让它进 require-dev,必须显式声明:composer require vendor/package --dev。漏掉 --dev 是最常见失误,执行完还得手动改 composer.json,还容易忘记删 vendor/ 里已装的包。
把已有生产依赖移到 require-dev 的三步操作
如果包已经在 require 里,但实际只用于测试或本地开发(比如 phpunit/phpunit、laravel/pint),不能只改 composer.json —— Composer 不会自动卸载再重装。必须同步处理锁文件和安装状态:
- 手动把包从
composer.json的require块剪切到require-dev块 - 运行
composer update vendor/package --no-install,只更新composer.lock,不碰vendor/ - 再运行
composer install,它会按新 lock 文件重新解析依赖,把该包移出生产环境安装树
跳过第二步会导致 composer.lock 和 composer.json 不一致,下次别人 install 可能仍装进生产环境。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
require-dev 的包在生产部署时真的不会被加载吗
只要部署时用 composer install --no-dev(Laravel、Symfony 等默认 CI 脚本都带这个参数),Composer 就不会安装 require-dev 下的任何包,也不会 autoload 它们的类。但要注意两个例外:
- 如果某个
require-dev包被require中的包通过autoload-dev或条件 autoloading 引入,它的类仍可能被加载(极少见,但phpstan某些插件有类似行为) -
composer.json里写了"autoload-dev": {"psr-4": {...}},且这些路径被生产代码意外 include,也会触发加载 —— 这属于代码设计问题,不是 Composer 本身逻辑
检查是否真被移除了:看 vendor/composer/autoload_classmap.php
最直接的验证方式不是看 vendor/ 目录有没有文件夹,而是查自动加载映射。运行 composer dump-autoload --optimize 后,打开 vendor/composer/autoload_classmap.php,搜索目标包的命名空间前缀。如果它还在里面,说明要么没走 --no-dev,要么该包被其他非-dev 依赖间接拉进了 autoload。这时候得用 composer show -t vendor/package 查依赖树,确认谁在引用它。










