答案是路径配置错误或目标目录不存在,“source path does not exist”表明composer未在文件系统中找到指定目录,需用ls或dir验证路径真实性、检查大小写、禁用~/$home、确认含composer.json且name字段与require完全一致。

确认报错路径是否真实存在且可读
“Source path does not exist”不是权限错误,而是 Composer 根本没在文件系统里找到你写的那个目录。它不关心你有没有权限,只查路径是否存在、是否含有效 composer.json。
先看报错里明确写出的路径,比如:
Source path ../my-package does not exist
立刻执行对应命令验证:
-
ls -ld ../my-package(Linux/macOS) -
dir ..\my-package(Windows CMD)
如果返回 “No such file or directory”,说明路径写错了——常见原因包括:
- 相对路径基准不对:你在子目录执行
composer install,但../my-package是按项目根目录算的,结果找偏了 - 大小写不一致:Linux/macOS 区分大小写,
My-Package≠my-package - 路径中用了
~或$HOME:Composer 明确拒绝这类写法,必须用绝对路径(如/home/user/my-package)或纯相对路径(如../my-package) - 目标目录是空的,或没有
composer.json文件
检查 repositories 配置位置和语法
Path 仓库配置必须写在 repositories 数组里,且 "type": "path" 对应的对象中,不能放在 config 或顶层字段下。
❌ 错误示例(被完全忽略):
{
"config": {
"symlinks": true
},
"repositories": [
{ "type": "package", "package": { ... } }
]
}
✅ 正确写法(symlinks 必须嵌套在 path 条目内):
{
"repositories": [
{
"type": "path",
"url": "../my-package",
"symlinks": true
}
]
}
注意版本兼容性:
- Composer 2.2+ 支持
"symlinks": true - 旧版必须用
"options": {"symlink": true},混用会静默失效
清理残留状态再重装
即使路径和配置全对,composer install 也不会自动把已复制的包改成软链接——它只忠实还原 composer.lock 记录的状态。
所以必须手动清除旧状态:
- 删掉整个
vendor/目录 - 删掉
composer.lock - 确保终端环境干净(VS Code 内置终端要彻底退出,不能只重启 pane)
然后运行:
composer install --no-cache --prefer-source
加 --prefer-source 是关键:它强制从源码拉取并尝试创建 symlink;--no-cache 避免缓存里还存着旧失败记录。
验证是否成功:cd vendor/vendor-name/package-name && ls -la,看到 -> 符号才表示链接生效。
name 字段大小写与 require 声明必须完全一致
这是最容易被忽略的硬校验点:本地包的 composer.json 中 name 字段,必须和主项目 require 里写的字符串**逐字匹配**,包括 vendor 名、分隔符、大小写。
例如,本地包 composer.json 写的是:
"name": "acme/utils"
那么主项目 require 必须是:
"acme/utils": "*"
哪怕写成 "ACME/utils"、"acme/utils-dev" 或 "acme/utils" 后多一个空格,都会触发 “Source path does not exist”,而且报错信息里**完全不会提示 name 不匹配**。
建议直接复制粘贴,别手敲;CI/CD 环境中尤其要注意 Git 的大小写敏感策略是否开启。











