path仓库的url必须是相对于主项目composer.json的路径,而非shell当前目录或家目录;须用./或../开头的显式相对路径,指向含合法composer.json的目录,且name字段大小写、分隔符须与require中逐字匹配。

path仓库的url必须是相对于主项目composer.json的路径
Composer 解析 url 时,基准点永远是主项目根目录下的 composer.json 文件所在位置,不是 shell 当前工作目录,也不是系统用户家目录。写错基准点,就会出现 "Source path ... does not exist" 却查不到原因。
-
url推荐用./packages/my-utils或../my-package这类显式相对路径,开头带./或../能避免歧义 - 绝对路径(如
/home/user/pkg或C:\dev\my-pkg)在跨机器、CI/CD、Docker 场景下极易失效,Windows 上还可能因反斜杠、空格、盘符导致静默忽略整个仓库 - 路径末尾不能加
/,"url": "../my-pkg/"会被 Composer 当作非法路径直接跳过,不报错也不提示 - 路径必须指向**包含
composer.json的目录**,不是该文件本身,也不是它的父目录或src/子目录
大小写、分隔符、vendor 名必须逐字匹配
Composer 对 name 字段做严格字符串比对,不忽略大小写、不转换下划线、不补全 vendor 前缀。本地包 composer.json 里的 name 和主项目 require 中写的值,必须完全一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 合法示例:
"name": "acme/utils"→"acme/utils": "dev-main";"name": "myorg-logging"→"myorg-logging": "*" - 非法示例:
"Acme/Utils"、"acme_utils"、"utils"、"myorg/logging"(用了下划线或斜杠混用)都会导致Could not find package - 路径中的目录名也需大小写一致:Linux/macOS 下
../MyPackage≠../mypackage;Windows 虽不区分,但团队协作时应统一小写+短横线
通配符路径(如 ../packages/*)的使用限制
通配符只在 url 中生效,且仅支持末尾单星号,用于批量注册同级多个本地包。但它不解决路径校验问题,每个匹配子目录仍需独立满足全部条件。
- 必须确保
../packages/目录真实存在,且其下每个子目录(如../packages/utils、../packages/client)都包含合法composer.json - 每个子目录的
name必须与require中声明的完全一致;不能靠通配符“模糊匹配”包名 - 不支持嵌套通配符(如
../packages/**/my-pkg)或中间通配(如../pkg-*/my-pkg) - CI 环境中慎用——若
../packages/未被挂载或为空,Composer 会静默跳过所有匹配,不报错
Windows 下路径写法的特殊注意事项
Windows 是 path 仓库最易出问题的平台,核心障碍不是斜杠方向,而是符号链接权限和路径解析稳定性。
- 路径中避免中文、空格、括号;某些 PHP 版本(尤其旧版)在解析含空格路径时会截断
- 推荐统一用正斜杠:
"url": "../my-package",PHP 内部会自动兼容;反斜杠"..\my-package"在 JSON 中需双写,易出错 - 必须以管理员身份运行终端,或提前启用 Windows 开发者模式,否则
symlink创建失败且无提示,fallback 到 copy 后代码修改不生效 - Docker 场景下,宿主机路径挂载进容器后,还需加
--cap-add=SYS_ADMIN才能创建 symlink,否则同样静默 fallback
url 校验发生在 JSON 解析之后、目录访问之前——只要 JSON 语法合法、路径字符串看起来像相对路径,它就会尝试访问,但失败时不抛异常,只沉默跳过。所以看到包没加载,第一反应不该是 ls 当前目录,而是先确认 composer show --all | grep your-vendor 有没有输出。










