执行 composer require vendor/package:dev-main 会修改 composer.json 的 require 字段和 composer.lock 文件,前者写入版本约束,后者记录实际 commit hash 和源地址,不修改 require-dev(除非加 --dev 参数)。

composer require dev-分支名会改哪些文件?
执行 composer require vendor/package:dev-main 会同时修改两个文件:composer.json 的 require 字段(写入 "vendor/package": "dev-main"),以及 composer.lock(记录实际拉取的 commit hash 和源地址)。它不会碰 require-dev,除非你加了 --dev 参数。
为什么写了 dev-main 却没拉到最新提交?
常见原因有三个:
-
composer.lock里已锁死旧 commit,而你只运行了composer install——它完全无视composer.json里的dev-main,只照 lock 文件还原 - 远程分支名拼错,比如写了
dev-master但仓库实际是main;Composer 不报错,悄悄回退到最近 tag(如v2.3.0) - 没配
"minimum-stability": "dev"或没在包版本后加@dev,导致 Composer 拒绝解析dev-前缀
怎么验证真的用了目标分支?
别信 composer show vendor/package 输出的 versions : dev-main,它只是别名。进 vendor/vendor/package/ 目录后执行:
-
git rev-parse --abbrev-ref HEAD—— 看输出是不是main -
git log -1 --oneline—— 比对 commit hash 是否和 GitHub/GitLab 上该分支最新提交一致
本地开发时想实时同步代码,怎么避免反复 composer update?
用 path 类型仓库 + symlink 选项:
- 在项目
composer.json的repositories里加一条:{"type": "path", "url": "../my-local-package", "options": {"symlink": true}} - 本地包的
composer.json中name必须匹配(如"acme/utils"),且不能以./开头 - 运行
composer require acme/utils:dev-main,此时vendor/acme/utils是个符号链接,改本地源码立刻生效
注意:不启用 symlink 时,默认行为是拷贝,改了本地代码必须手动 composer update acme/utils 才能同步。











