最直接的判断方式是用ls -la vendor/vendor/name(Linux/macOS)或dir vendorendor ame(Windows)查看是否含“->”或“”指向本地绝对路径,否则为复制模式。

看 vendor 目录下是不是符号链接
最直接的判断方式是检查 vendor/ 里对应包是否为符号链接,而不是复制出来的文件夹。Linux/macOS 下运行:
ls -la vendor/vendor/name
如果输出中包含 -> 并指向你本地的绝对路径(比如 /home/user/my-pkg),说明 path 依赖已生效;如果看到的是普通目录、空文件夹或一堆真实文件,基本就是失败了。
Windows 用户可用:
dir vendorendor ame
确认显示的是“”而非“”,且目标路径是你本地包所在位置。
查 composer.lock 里的 source.type
打开项目根目录下的 composer.lock,搜索你的包名,找到它对应的条目。重点看这两个字段:
-
"source": {"type": "path", "url": "/your/local/path"}——type必须是path,url必须是**绝对路径**(Windows 如C:/dev/my-pkg,Linux/macOS 如/home/user/my-pkg) - 相对路径(如
../my-pkg)或带file://前缀的写法,在 lock 文件里会被忽略或转成空值
运行 composer show 确认包信息
执行:
composer show vendor/name
若返回 Package not found,说明 Composer 根本没识别到这个包;若正常输出,注意看两处:
-
versions行是否含(alias for dev-main)或类似开发分支标识 -
source行是否显示path /your/local/path—— 这个 “path” 字样不能少
如果只显示版本号但没 path 关键字,大概率走的是 dist 模式(配置有误)。
运行时验证类是否真能加载
光看文件结构和 lock 不够,得让 PHP 实际加载一次:
php -r "var_dump(class_exists('VendorPackageSomeClass'));"
返回 bool(true) 才算真正通路。常见卡点:
- 没运行
composer dump-autoload,autoload_static.php 没更新 - 本地包的
autoload配置里 namespace 和目录不匹配(比如写了"MyPackage\": "src/",但实际类在src/Utils/下却没声明子命名空间) - IDE 缓存了旧链接(PHPStorm 尤其明显),需清索引或重启
符号链接存在、lock 文件写对、show 能查到,只是第一步;class_exists() 返回 true,才是最终确认点。











