Composer验证配置需三层检查:本地包composer.json合法(name格式、git初始化、JSON语法)、主项目repositories正确声明(根级数组、禁用packagist、相对路径)且require版本匹配(如dev-main),装入后autoload配置正确并执行dump-autoload或update刷新符号链接。

扩展包开发完成后,Composer 验证配置不是“装上就完事”,而是分三层检查:本地包自身可被识别、主项目能正确声明依赖、装入后类能自动加载。三者任一缺失,都会导致 Class not found 或 Could not find package。
本地包的 composer.json 是否合法且可被扫描
Composer 扫描 path 仓库时,只读取目录下的 composer.json,但会静默跳过任何不合规的文件——不报错、不提示,直接忽略。
- 必须有
name字段,格式为vendor/name(如"acme/utils"),大小写敏感;拼成"Acme/utils"或"acme_utils"都失败 -
version字段建议显式写"dev-main"(或"dev-develop"),否则在minimum-stability默认为stable时会被过滤掉 - 目录下必须已执行
git init && git commit -m "init";无 Git 仓库,Composer 直接跳过该路径 - 用
php -r "json_decode(file_get_contents('composer.json')) or die(json_last_error_msg());"直接验证 JSON 语法,比composer validate更快定位 BOM、全角符号、末尾逗号等问题
主项目是否正确定义了 path 仓库和依赖
常见错误是把 repositories 写进本地包自己的 composer.json,或漏掉禁用默认源,结果 Composer 根本没“看见”你的包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
repositories必须写在主项目根目录的composer.json根级,且是合法 JSON 数组:"repositories": [{"type": "path", "url": "./packages/acme-utils"}] - 必须加
{"packagist.org": false}在repositories数组最前面,否则 Composer 仍优先查官方源,你的本地包永远轮不到 -
url值必须用相对路径(./packages/xxx),禁用file://、~/、绝对路径(Windows 下C:/...易静默失败) -
require中的版本约束必须用"dev-main"这类分支名,不能写"^1.0"或"*";否则报Could not find a matching version,其实包就在隔壁
装入后能否正常 autoload 和运行
包装进 vendor/ 不代表能 new 出来。90% 的 Class not found 问题出在 autoload 配置或未刷新映射。
- 确认本地包自己的
composer.json含正确autoload,例如:"psr-4": {"Acme\Utils\": "src/"} - 改完本地包代码或新增类后,必须在主项目中运行
composer dump-autoload(开发阶段不用加-o) - 如果是 Laravel 包,且提供 Service Provider,需手动在
config/app.php的providers数组里注册;Composer 不处理这个 - 验证是否 symlink 成功:
ls -la vendor/acme/utils(Linux/macOS)应显示-> ../packages/acme-utils;Windows 下用dir vendorcmeutils看是否为“快捷方式”类型
最容易被忽略的是:composer install 不会刷新已有 symlink 的目标,改了本地包代码后必须 composer update acme/utils,而不是 install 或 dump-autoload 单独操作。

















