本地开发包通过path仓库配置后,主项目composer.json无需修改,改包代码、切分支均即时生效;需确保本地包composer.json的name与require一致、url为相对路径、version设为"dev-main"或"@dev",并启用symlink(注意权限和git初始化),全局配置可简化多包管理。

path仓库配置一次,后续改包不用动主项目composer.json
本地开发包一旦通过repositories配置好type: "path",主项目的composer.json就固定了——后续你只管改本地包代码、提交 Git、切分支,都不需要再碰主项目的依赖声明。
关键前提是:本地包目录里必须有合法的composer.json,且name字段(如"acme/utils")和主项目require中的包名完全一致;url写成相对于主项目composer.json的显式路径(如"../acme-utils"),别用~或环境变量。
- 本地包
composer.json中version字段可设为"dev-main",主项目require对应写"acme/utils": "dev-main",这样换分支只需在本地包里git checkout feat/x,项目里立刻生效 - 如果本地包没 Git 或懒得打 tag,统一用
"@dev"作为版本约束,它强制走path源,不查 Packagist,也不依赖version字段 - 删掉本地包目录后,Composer 不会报错,但
composer install会跳过该包——这比“找不到包”更安静,适合临时关闭调试
用symlink保持热更新,改完代码不用composer update
path类型默认启用符号链接(symlink),vendor/acme/utils实际是指向../acme-utils的软链。改完本地包代码,项目里立刻能new Utils(),完全绕过composer update流程。
但 symlink 可能静默 fallback 到复制模式,导致改了代码却没生效。常见原因:
- Windows 下没以管理员身份运行终端,或未开启“开发者模式”
- 主项目
composer.json里"config": {"symlinks": false}被显式关掉 - 本地包目录权限不足,Composer 自动退回到 copy 模式,且不报错
- 本地包没执行过
git init并至少一个 commit,Composer 拒绝 symlink,fallback 到 dist 安装
验证是否真用了 symlink:ls -l vendor/acme/utils(macOS/Linux)或dir vendorcmeutils(Windows),看到->或<symlinkd></symlinkd>才是正常状态。
把常用本地包收进全局 repositories 配置
如果你同时调试多个本地包(比如acme/utils、acme/api-client、acme/logger),每次都在每个项目里重复写repositories太累。可以用 Composer 全局配置一次:
composer config -g repositories.acme-path '{"type":"path","url":"~/dev/acme/*"}'
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
注意:url支持*通配符,匹配~/dev/acme/下所有含合法composer.json的子目录;每个子目录的name仍需与require中包名严格一致。
这样,任何项目只要require里写"acme/utils",Composer 就自动从~/dev/acme/utils加载,无需再改项目级composer.json。
缺点是全局配置对 CI 环境不友好,建议只用于本机开发;上线前务必确认所有path源已替换为正式 VCS 仓库地址。
本地包升级后 autoload 失效?先dump-autoload再验证
本地包加了新类、改了autoload映射(比如新增"psr-4": {"Acme\": "src/"}),即使 symlink 正常,new AcmeFoo()仍可能报Class not found——因为 autoloader 缓存没刷新。
必须手动触发:
- 运行
composer dump-autoload(或简写composer du),重新生成vendor/autoload.php里的映射表 - 如果本地包用了
classmap,且新增了文件,dump-autoload会自动扫描,但最好加--optimize确保覆盖 - 若项目启用了
--classmap-authoritative,旧的 classmap 条目不会自动清理,得删掉vendor/composer/autoload_classmap.php再重跑
最容易被忽略的是:改了本地包的autoload段后,只在本地包目录里composer dump-autoload没用——必须在主项目根目录执行,因为 autoloader 是主项目生成的。










