必须用 path 类型仓库实现本地测试,因其强制符号链接或目录映射,跳过版本校验,确保 autoload 实时生效;其他方式均会导致类加载失败或修改不生效。

本地测试 Composer 包,不是把代码扔进 vendor 就完事——autoload 断了、类找不到、改了代码不生效,90% 是因为没走对路。唯一稳定、可复现、支持实时调试的方式,是用 path 类型仓库。
为什么必须用 path 仓库而不是直接 require 或拷贝
path 类型强制启用符号链接(Linux/macOS)或目录映射(Windows),跳过版本校验和远程解析,让 Composer 把你的本地目录当“已安装包”对待。其他方式都会掉坑:
-
composer require vendor/package:@dev+vcs仓库:仍走 Git 克隆,改代码要 commit/push 才生效 - 手动复制到
vendor/:autoload 不加载、composer dump-autoload无效、Windows 下静默 fallback 到 copy - 全局
composer global require:完全脱离项目上下文,phpunit都跑不起来
三处 name 和路径必须严格对齐
错一个字符,composer update 就报 Could not find package。检查这三点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 主项目
composer.json的repositories中url值,是相对于该文件的路径,比如"../my-package" - 主项目
require里写的是"my-vendor/my-package": "@dev"—— 必须用@dev,不用*或dev-main - 本地包根目录的
composer.json中"name": "my-vendor/my-package",大小写、连字符、斜杠全部一致
autoload 配置写错,测试类就永远加载不到
测试类报 Class not found,根本不是 PHPUnit 的问题,是命名空间和 autoload-dev 没对上:
-
autoload-dev的 PSR-4 映射末尾必须带反斜杠:"MyPackage\Tests\": "tests/",少一个就断掉 -
tests/Http/ClientTest.php里声明namespace MyPackageTestsHttp,那autoload-dev就不能写成"MyPackageTests": "tests/"(缺Http层级) - 无命名空间的辅助文件(如
tests/bootstrap.php)不能塞进 PSR-4,得用autoload-dev.files单独引入 - 改完
autoload-dev后,必须手动运行composer dump-autoload --dev,否则vendor/composer/autoload_dev.php不更新
验证是否真生效:别只看 vendor 目录
执行 composer update my-vendor/my-package 后,别急着跑测试,先确认底层链路通了:
- 运行
readlink vendor/my-vendor/my-package(Linux/macOS)或dir vendormy-vendormy-package(Windows),确认是符号链接或真实目录映射 - 执行
php -r "echo class_exists('MyPackage\Calculator') ? 'ok' : 'fail';",输出ok才说明生产 autoload 生效 - 再跑
php -r "echo class_exists('MyPackage\Tests\CalculatorTest') ? 'ok' : 'fail';",验证测试类也能加载 - 如果用 OPCache,记得关掉或
opcache_reset(),否则改了代码也看不到效果
最常被忽略的点:插件类、测试类、bootstrap 文件三者命名空间与 autoload 映射之间差一个反斜杠、多一个空格、大小写不一致,就会在 CI 里静默失败——本地能过只是因为缓存没清干净。

















