结论是:path仓库不是安装本地包,而是将本地目录作为可解析的包源;必须在主项目composer.json的repositories中配置相对路径,且本地包需有合法name、version和autoload,require字段仅写vendor/name:version。

直接说结论:path 仓库不是“安装本地包”,而是让 Composer 把你磁盘上的目录当成一个可发现、可解析的包源——它不复制代码,只建立链接或拷贝,改即生效。
path 仓库必须配在项目级 composer.json 的 repositories 数组里
Composer 不会自动扫描 ./packages/ 或其他路径;它只认 repositories 字段里明确定义的源。漏掉这一步,composer require 永远去 Packagist 找,报 Could not find a matching version of package。
-
repositories必须是项目根目录下composer.json的顶层字段,不能嵌在config、scripts或其他对象里 - 推荐用相对路径:
"url": "./packages/my-utils",避免换机器后绝对路径失效 - 路径必须指向一个含合法
composer.json的目录(即该目录就是包的根),不能是父级或空目录 - 如果本地包目录名和
name不一致(比如目录叫my-utils,但包名是acme/toolkit),只要name对得上require字段就行
本地包自己的 composer.json 至少要有 name 和 version
没有 name,Composer 根本不知道这个目录对应哪个包;没有 version,require 时写 "*" 或 "dev-main" 都会失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
name必须是标准 vendor/name 格式,如"acme/utils",大小写敏感,不能带空格或下划线开头 -
version可写"dev-main"(对应 main 分支)、"1.0.x-dev"(开发版语义)或"0.1.0"(正式 tag);CI 环境建议用dev-main避免版本冲突 -
autoload必须正确,否则vendor/autoload.php加载不到类;常见错误是 PSR-4 映射路径写错,比如"Acme\Utils\": "src/"但实际类文件在lib/
require 字段不能写路径,必须写 vendor/name:version
这是最常踩的坑:"acme/utils": "./packages/my-utils" 是非法语法,Composer 直接忽略该行,仍去远程查。
- 正确的
require写法只有:"acme/utils": "*"、"acme/utils": "dev-main"或"acme/utils": "1.0.x-dev" - 执行安装命令也必须用
composer require acme/utils,不是composer require ./packages/my-utils - 如果本地包没打任何 tag,且默认分支不是
main(比如是master),就得写"acme/utils": "dev-master",否则找不到
symlink 行为在不同系统表现不同,options 要显式控制
Linux/macOS 默认软链,Windows 默认拷贝;但 Windows 启用软链需管理员权限或开启开发者模式,否则 composer install 失败。
- 想强制复制(推荐 CI 或 Windows 开发):
"options": {"symlink": false} - 想强制软链(macOS/Linux 调试更顺):
"options": {"symlink": true} - 软链失效时,
ls -la vendor/acme/utils会显示 broken link;此时删掉vendor/和composer.lock,重跑composer install - Windows 上若看到
Operation not permitted,先确认是否以管理员身份运行终端,或改用"symlink": false
真正容易被忽略的是:path 仓库对 composer update 无效——它只影响首次安装和 composer install;改了本地包的 composer.json(比如加了新依赖),必须手动删 vendor/ 和 composer.lock 再重装,否则旧依赖关系不会刷新。










