repositories 必须直接定义在 composer.json 根级数组中,格式为 [{"type": "path", "url": "./packages/my-utils"}];type 必须为 "path",url 为相对路径且不能越界;本地包 composer.json 必须包含合法 name、autoload 和可选 version 字段;require 时版本需与本地包一致,如 dev-main;autoload 生效需运行 composer dump-autoload 并确保 PSR-4 映射与文件路径严格匹配。

repositories 必须写在根级数组里
不是塞进 require、autoload 或其他字段,而是直接挂在项目根目录 composer.json 的最外层数组下。漏掉这一步,Composer 完全无视你写的本地路径。
正确结构是:
{
"repositories": [
{
"type": "path",
"url": "./packages/my-utils"
}
],
"require": {
"mycompany/utils": "*"
}
}
注意点:
-
repositories是数组,哪怕只加一个仓库也得用[{...}]包裹 -
type必须是"path",写成"package"或"vcs"都不生效 -
url是相对路径,从composer.json所在目录算起;不能以file://开头,也不能用绝对路径(/home/xxx或C:/xxx) - 路径不能跨出项目根目录,比如
"../my-package"在多数场景下会被 Composer 拒绝
本地包的 composer.json 必须合法且完整
Composer 扫描 url 指向的目录时,会尝试读取里面的 composer.json。如果这个文件缺失、语法错误、或缺关键字段,它就静默跳过——不报错,也不提示,但 composer require 一定失败。
最小可用配置至少包含:
{
"name": "mycompany/utils",
"autoload": {
"psr-4": {
"MyCompany\Utils\": "src/"
}
}
}
必须核对的三项:
-
name字段值(如"mycompany/utils")和你在composer require时写的包名**完全一致**(大小写敏感) - 要有
autoload配置,否则类根本不会被加载;Laravel 或其他框架不会帮你补这个 - 如果没写
version字段,又没在主项目中设"minimum-stability": "dev",那么dev-main这类分支名会被稳定性策略过滤掉
require 时版本号要和本地包对齐
执行 composer require mycompany/utils 不等于“装最新”,而是让 Composer 去已声明的源里找匹配的版本。它不会猜、不会 fallback、也不会自动选 dev-main。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
所以实际命令通常是:
composer require mycompany/utils:dev-main
前提是本地包的 composer.json 中有 "version": "dev-main",或者 Git 分支名为 main 且没设 version 字段(此时依赖 minimum-stability 配置)。
常见误操作:
- 本地包是
dev-master分支,却执行composer require mycompany/utils:dev-main - 本地包
composer.json里写的是"version": "1.0.0",却执行composer require mycompany/utils:dev-main - 忘了先运行
composer update或composer install,只改了配置却不触发重解析
autoload 不生效?先 dump-autoload,再检查命名空间
装完包不代表类能用。90% 的 Class not found 错误和 Composer 加载无关,而是自动加载链路断了。
必须做两件事:
- 运行
composer dump-autoload(开发阶段不用加-o)——新注册的 PSR-4 映射只有这时才写入vendor/autoload.php - 确认本地包的
autoload.psr-4声明和实际文件路径严格对应:比如映射"MyCompany\Utils\": "src/",那MyCompanyUtilsHelper就必须落在src/Helper.php
额外提醒:Laravel 的 config/app.php 中的 providers 和 aliases 是框架层逻辑,Composer 不管这些。如果包提供了 ServiceProvider,你得手动注册。

















