--no-dev仅删除require-dev声明的完整包及其子目录,不删require包内的tests/docs等;它省30–60mb但无法解决vendor文件数问题,需搭配--prefer-dist和--remove-vcs才有效。

no-dev参数到底删了哪些文件
--no-dev 只跳过 require-dev 区块里声明的包,比如 phpunit/phpunit、phpstan/phpstan、mockery/mockery 这类完整包及其全部子目录。它不会碰 require 里的包内部的 tests/ 或 docs/——哪怕某个 monolog/monolog 包自带 2000 个测试文件,--no-dev 也照单全收。
常见误判是以为加了 --no-dev 就“瘦身成功”,结果 du -sh vendor 还是 180MB。真正被它干掉的,往往是几十个 dev-only 包,每个平均 1–3MB,合计能省 30–60MB,但远不足以解决 vendor 文件数爆表问题。
为什么加了no-dev还是报Class not found
因为很多项目把运行时依赖偷偷塞进了 require-dev:比如 symfony/var-dumper 被日志组件调用,sebastian/environment 被 SDK 的异常处理链引用,laravel/pint 被某中间件的调试逻辑 require。这些包删掉后,php -d display_errors=1 -r "require 'vendor/autoload.php';" 直接报错。
验证方式不是靠猜,而是实操:
- 先跑
composer install --no-dev - 再执行
composer dump-autoload -a,观察是否触发 autoload 错误 - 出错时用
composer depends查谁在依赖它(需 Composer 2.5+) - 确认后把真需要的包从
require-dev移到require,哪怕只是“可选运行时”
no-dev必须搭配prefer-dist和remove-vcs才有效
单独用 --no-dev 是半截操作。没加 --prefer-dist,Composer 仍可能 git clone 某些包(尤其本地源或私仓),保留完整 .git/;没加 --remove-vcs,dist 包里残留的 .git 目录照样落地——一个 Laravel 包的 .git 就能占 15MB+,且含上万 inode。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
必须组合使用:
-
rm -rf vendor(不能用update,它不重裁剪) composer install --no-dev --prefer-dist --remove-vcs- 确保
composer.json已写入"optimize-autoloader": true
否则 --no-dev 省下的空间,很快被单个包的 .git/ 和 tests/ 吃掉。
no-dev对Serverless和容器部署的真实影响
Serverless 平台(如 AWS Lambda)限制的是解压后体积,不是 zip 大小。--no-dev 对压缩率无提升,但它减少了要解压的包数量——每个被跳过的 dev 包,都意味着少解压一个 zip、少创建几万个文件、少消耗几万 inode 配额。
更关键的是:它让后续的 --classmap-authoritative 生效更干净。如果 vendor/ 里混着 phpunit 的完整源码树,即使启用了 classmap,autoload_static.php 里仍会生成大量无效路径映射,冷启动时 fallback 扫描仍可能触发 inode 耗尽。
容易被忽略的一点:vendor/bin/ 下的二进制脚本(如 phpunit)本身很小,但它们指向的源码包体积巨大;--no-dev 删的是源码包,不是脚本——这才是真正减体积的逻辑链。










