会,composer update --no-dev只删除vendor中已安装的dev包,但不修改composer.lock中的dev记录;必须加--lock参数才能清空lock文件里的packages-dev区块。

composer update --no-dev 会删掉已安装的 dev 包吗
会,但只删 vendor/ 下已安装的包,不删 composer.lock 里的 dev 记录——除非你加 --lock 或明确用 composer update --no-dev --lock。
常见误判是:跑完 composer update --no-dev 后发现 vendor/phpunit/phpunit 消失了,就以为 lock 文件也干净了。其实 packages-dev 区块还在 lock 文件里,下次不带 --no-dev 的 composer install 仍会还原。
-
composer update --no-dev:只更新require下的包,卸载当前 vendor 中所有require-dev包,但 lock 文件不变 -
composer update --no-dev --lock:同上 + 强制重写 lock 文件,清空packages-dev区块(Composer 2.2+ 支持) - 没加
--lock时,composer.lock仍含 dev 包记录,后续composer install会报错:dev dependencies not found
为什么加了 --no-dev 还提示 “dev dependencies not found”
根本原因不是参数失效,而是 composer.lock 里存着 dev 包的 dist 信息,但 --no-dev 禁止安装,Composer 直接拒绝执行。
典型场景:本地开发时执行过 composer update(没加 --no-dev),lock 文件已“污染”。CI 脚本里再跑 composer install --no-dev 就会卡住。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 验证方式:打开
composer.lock,搜"packages-dev":或直接查"phpunit/phpunit"、"mockery/mockery" - 修复动作必须在干净环境(
rm -rf vendor composer.lock)下运行:composer update --no-dev --lock - 别指望
composer install --no-dev自动清理旧 lock —— 它只校验,不改写
composer update --no-dev 和 --with-dependencies 的关系
--with-dependencies 不改变 --no-dev 的行为边界,但它会影响依赖图的计算范围。
比如你运行 composer update monolog/monolog --no-dev --with-dependencies,Composer 会重新解析 monolog 及其所有传递依赖(包括它 require 的其他包),但全程跳过任何出现在 require-dev 里的包,哪怕它们是 monolog 的间接 dev 依赖。
-
--with-dependencies是为了确保主包更新后,其依赖链保持一致,不是为了“拉进 dev 包” - 如果某个包同时被
require和require-dev引用(如symfony/console),--no-dev仍会保留它——因为它是 runtime 依赖 - 真正危险的是那些只出现在
require-dev里的包(如phpstan/phpstan),--no-dev保证它们不会被装、不会被算进依赖图
CI/CD 中怎么避免 --no-dev 失效
Docker 构建层缓存和 CI 工作空间残留是最大隐患,--no-dev 参数本身没问题,但环境可能让它形同虚设。
比如 Dockerfile 里写 RUN composer install --no-dev,但上一层缓存里已有完整 vendor/,这行命令会被跳过,dev 包照旧存在。
- 强制清除:在
composer install前加RUN rm -rf vendor/ && rm -f composer.lock(或git clean -xffd vendor/) - 固定 lock:首次上线前,本地或 CI 中用
composer update --no-dev --lock生成干净 lock,并提交到仓库 - 验证手段不能只看命令输出:容器启动后必须执行
composer show --dev(应报错或返回空),以及ls vendor/ | grep -E "phpunit|phpstan|symfony/debug-bundle"(应无输出)
--no-dev 只是一道闸门,挡不住上游已经混进来的水。










