路径仓库需满足三条件:字符串路径、含合法composer.json、url为双引号字符串;require包名须与本地name逐字符一致;启用symlink需显式配置"options": {"symlink": true}。

路径仓库(path 类型仓库)不是“让 Composer 找到本地代码”的快捷开关,而是明确告诉它:“这个目录就是个包,按它的 composer.json 解析,别走网络”。配错任何一环,vendor 里就会是硬拷贝,改代码完全不生效。
怎么写 repositories 才被识别为有效 path 仓库
必须满足三个硬性条件:路径是字符串、指向含 composer.json 的目录、JSON 语法无误。
-
url字段值必须是双引号包裹的字符串,不能省略引号或写成裸路径(如url: ../pkg是非法 JSON) - 路径支持相对(
"../my-pkg"、"./packages/utils")和绝对路径("/home/user/my-pkg"),但不支持~/或file:// - 该路径下必须存在语法合法的
composer.json:无尾逗号、所有键名用双引号、name字段非空且格式为vendor/name - Windows 用户注意:路径分隔符用
/更稳妥("C:/dev/my-pkg"可行,"C:devmy-pkg"易因反斜杠转义失败)
require 中的包名和版本为什么总匹配失败
path 仓库不做语义化版本计算,只做字符串比对 + 分支推断。匹配失败几乎都源于 name 或 version 不对齐。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
require中的包名必须与本地包composer.json的name字段**逐字符一致**(大小写、连字符、vendor 名全部敏感) - 若本地包写了
"version": "1.0.0","*"或"^1.0"仍会失败——path 仓库默认忽略稳定版 version,只认dev-前缀分支名 - 最稳写法:删掉本地包
composer.json中的version字段,确保它是 Git 仓库,且当前分支为main;主项目require写"vendor/name": "dev-main" - 若主项目
minimum-stability是默认"stable",需显式设为"dev",否则dev-main直接被过滤
为什么 vendor 里不是符号链接而是复制文件
Composer 默认对 path 包也执行复制,symlink 不是默认行为,也不是靠主项目配置就能开启。
- 必须在
repositories条目中显式加"options": {"symlink": true},仅靠config.preferred-install或--prefer-source不可靠 - Windows 下需管理员权限运行终端(CMD/PowerShell),否则
symlink创建失败,Composer 自动 fallback 到复制 - 符号链接创建后,修改本地包代码确实能立刻生效,但错误堆栈里会暴露你本地的绝对路径(比如
/Users/you/dev/my-pkg/src/Helper.php),生产环境调试时可能泄露信息 - IDE 跳转、Xdebug 断点依赖 symlink 的真实路径映射,若 symlink 损坏或未生效,IDE 会找不到定义
哪些地方最容易被当成“配置成功”却实际失效
静默失败比报错更危险:看起来装上了,但改代码没反应,查半天才发现根本没走 path 仓库。
- 主项目
composer.lock里记录的是 Packagist 版本,不是本地路径——删了 lock 文件再composer install才能强制重解析 - 本地包
autoload配置错误(比如 PSR-4 前缀写成"Acme\"却把文件放在src/下),会导致类找不到,和 path 无关,但容易误判 - PHP opcache 启用时,即使 symlink 生效,旧字节码仍被缓存;CLI 下要
opcache_reset(),Web 下需重启 PHP-FPM - 把
repositories配置提交进 Git——别人拉代码后路径不存在,CI 构建直接失败,这是协作雷区

















