手动修改 composer.json 的 repositories 数组添加 path 类型仓库即可配置本地包开发,无需脚本;需确保路径正确、包名一致、版本用 "dev-main" 或 "@dev",并验证 symlink 是否生效。

直接改 composer.json 的 repositories 就行,不用“一键”脚本
Composer 本身没有所谓“一键配置本地包开发模式”的命令或开关。所谓“一键”,其实是把三件事串起来:声明本地路径仓库、写对包名和版本约束、确保 symlink 生效。手动改几行 JSON 比找脚本更可靠,也更容易排查问题。
-
repositories必须是数组,哪怕只加一个 path 仓库也要写成[{"type":"path","url":"../my-package"}] -
url必须是相对于主项目composer.json的显式路径,不支持~、$HOME或环境变量 -
require中的包名(如"acme/utils")必须和本地包composer.json里的name字段完全一致 - 版本建议用
"dev-main"或"@dev",前者需本地包有main分支,后者强制走本地源、忽略 Packagist
composer install 后没生成软链?先查 symlink 是否 fallback 了
path 类型默认启用 symlink,但很多情况下会静默退化为 copy 模式——你改了本地包代码,主项目里却没反应,大概率就是这个原因。
- Windows 下没以管理员身份运行终端,或未开启“开发者模式”,
symlink创建失败 - 主项目
composer.json里写了"config": {"symlinks": false},直接关死了 - 本地包目录没执行过
git init && git commit -m "init",Composer 拒绝 symlink - 本地包目录权限不足(尤其 macOS/Linux),Composer 自动 fallback 到 copy,且不报错
验证是否真用了 symlink:ls -l vendor/acme/utils(macOS/Linux)或 dir vendor\acme\utils(Windows),看到 -> 或 <symlinkd></symlinkd> 才算成功。
多个本地包要反复配?用全局 repositories 一次搞定
如果你同时调试 acme/utils、acme/api-client、acme/logger 这类包,每个项目都写一遍 repositories 很累。可以用 Composer 全局配置通配路径:
composer config -g repositories.acme-path '{"type":"path","url":"~/dev/acme/*"}'
这个配置会让所有项目自动识别 ~/dev/acme/ 下任意含合法 composer.json 的子目录为本地包源。注意:* 只匹配一级子目录,不递归;且仍要求每个子目录里有完整的 composer.json 和 name 字段。
composer update 不是必须的,但删包目录后 composer install 会跳过它
很多人误以为每次改本地包都要 composer update。其实只要 symlink 生效,改完代码立刻能 new Utils(),完全绕过更新流程。真正需要 composer update 的场景只有两个:第一次安装、或者你改了 require 的版本约束(比如从 "dev-main" 改成 "dev-feat/x")。
- 本地包目录被删掉后,
composer install不会报错,而是安静地跳过该包——这比“找不到包”更难察觉,适合临时关闭调试 - 如果本地包没 Git 提交,又用了
"@dev",Composer 仍能加载,但不会 symlink;此时改代码必须composer dump-autoload才生效(仅限 autoload 变更)
最常被忽略的是:本地包的 composer.json 里 autoload 配置必须正确,否则即使 symlink 成功,new Utils() 也会报类找不到——这不是依赖问题,是自动加载映射断了。


















