composer install --no-dev未清掉phpunit是因为lock文件仍存其记录,该参数仅跳过安装不清理lock,需配合composer update --no-dev --lock更新lock文件并验证autoload映射。

composer install --no-dev 为什么没清掉 phpunit
根本不是参数失效,而是 composer.lock 文件里已经存了 phpunit/phpunit 这类包的记录。只要 lock 文件里有 require-dev 条目,composer install --no-dev 就只跳过安装动作,不清理 lock 中的声明——下次 CI 或他人执行 composer update,这些 dev 包又会悄悄回来。
- 检查
composer.lock:用文本编辑器打开,搜索"phpunit"或"require-dev"字段,确认是否残留 - 本地开发时若已删了
composer.json中的require-dev段,必须同步执行composer update --no-dev --lock,否则 lock 文件不会自动更新 - 团队协作中,有人执行过
composer update却没加--no-dev,就会污染 lock 文件;建议 Git 提交前用git diff composer.lock快速扫一眼新增的 dev 包
开发环境要不要保留 vendor/bin/ 和 tests/ 目录
要保留,但得明确用途边界——它们不是“上线残留”,而是开发链路的一部分。问题出在混淆了“开发可用”和“开发默认启用”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
vendor/bin/下的phpunit、phpcs等工具,应仅通过./vendor/bin/phpunit显式调用,而非全局 PATH 注入;避免误执行或权限冲突 -
vendor/{package}/tests/不影响运行,但 IDE(如 PHPStorm)可能因扫描这些目录导致索引变慢、跳转错乱;可在 IDE 设置中将**/tests/**标为 Excluded - 若用 Laravel Dusk 或 Pest,其测试入口在项目根目录(
tests/),与 vendor 内 tests 无关;别因为看到 vendor 里有 tests 就删它——那是包作者写的单元测试,删了不影响你写自己的
如何让本地开发和 CI 构建行为一致
关键不是“怎么装”,而是“从哪装”。本地 composer install 容易受全局配置、缓存、PHP 版本差异干扰,CI 必须隔离。
- CI 脚本第一行加
export COMPOSER_HOME=$(pwd)/.composer-cache,避免读取宿主机缓存或写入 /root/.composer - Docker 构建中,
COPY composer.json composer.lock ./必须放在RUN composer install之前,且不能夹在代码 COPY 中间——否则缓存失效,每次重装依赖 - 本地开发若用 Docker,建议复用 CI 的构建阶段镜像(如
FROM php:8.3-cli AS composer),而不是直接docker run -v $(pwd):/app composer install——后者会继承宿主机的 uid/gid,导致 vendor 权限混乱
autoload-dev 残留导致 Class not found 怎么查
现象是:删了 require-dev、跑了 --no-dev,但运行时仍报 Class 'TestsTestCase' not found。这不是安装问题,是 autoloader 没刷新。
- 看
vendor/composer/autoload_static.php或autoload_psr4.php,搜索"Tests\"或"test",确认是否还映射着已删包的测试命名空间 - 执行
composer dump-autoload --no-dev(注意不是install),它会重生成 autoload 文件,剔除 dev 相关映射 - 某些包(如
laravel/framework)在autoload-dev里注册了IlluminateTests*,即使没装 phpunit,这些路径也可能被加载——这时需手动删掉vendor/composer/autoload_dev.php(Composer 2.5+ 已废弃该文件,但旧 lock 可能残留)
--lock 更新、IDE 自动补全拉进 test 类、或者 CI 用了缓存却没清 composer home,问题就藏在缝隙里。










