composer 不支持本地 http 源,仅支持 type: "path" 的本地文件系统路径;必须将 repositories 配置写在主项目根 composer.json 根级数组中,url 为相对路径,且本地包需有正确 name、version 和 autoload 的 composer.json,并执行 git commit,否则 require 会静默失败。

直接说结论:Composer 本身不支持“本地搭建源服务器”这种模式;所谓“本地源路径”,实际只有 type: "path" 这一种原生方式,它不是 HTTP 服务,而是直接读取本地文件系统目录——配错位置、路径或 name,composer require 就会静默失败,报 Could not find package。
为什么 composer require vendor/name:dev-main 总报 “Could not find package”
根本不是网络或权限问题,而是 Composer 根本没“看到”你的本地目录。它只从主项目 composer.json 根级的 repositories 数组里找源,require 字段只声明“我要谁”,不指定“去哪找”。
-
repositories写在了本地包自己的composer.json里(无效,必须写在主项目根目录) -
url写成绝对路径如"C:/work/my-pkg"或"/home/user/pkg"(Windows 下极易静默失败;应改用"../my-pkg"或"./packages/utils") - 本地包目录下没有
composer.json,或有但name字段拼错(比如写了"acme/utils",而require里写的是"Acme/utils"或"acme_utils") - 本地包目录没执行过
git init && git add . && git commit -m "init"(Composer 会直接跳过该目录)
repositories 配置必须满足的硬性格式条件
这个配置不是可选补充,是唯一入口。错一个字符,整个机制就失效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须放在主项目根目录
composer.json的**根级**repositories数组里,不能嵌套在config、extra或require中 - 类型必须是
"type": "path",不是"package"或"vcs" -
url是相对于主项目composer.json的路径,如"../my-utils"或"./packages/sdk";末尾不能加/("../my-utils/"会被静默跳过) - 不支持
file://协议、~、环境变量(如$HOME);Windows 下推荐统一用正斜杠/ - 整个
repositories是数组,哪怕只配一个,也要写成[{ "type": "path", "url": "./packages/my-pkg" }]
本地包 composer.json 的三个关键字段怎么写
Composer 不解析目录名或文件结构,只认这个文件里的字段,且校验极其严格。
-
name必须是vendor/name格式,全小写,只允许短横线-,不能有下划线_或大写字母("acme/utils"≠"Acme/Utils") -
version字段建议显式设为"dev-main"(Git 2.27+ 默认分支)或"dev-develop";若没打 tag,别写"1.0.0",否则require时匹配失败 -
autoload必须声明 PSR-4 映射,例如:"psr-4": {"Acme\Utils\": "src/"};改完后需在主项目运行composer dump-autoload才生效
为什么 composer install 后 vendor/ 里没东西,或不是符号链接
composer install 只照 composer.lock 安装,完全跳过 repositories 解析。它不会发现新配的本地 path 源,也不会重建 symlink。
- 要让本地包进
vendor/,必须先composer require vendor/name:dev-main,再composer update vendor/name(不是全量update) - 符号链接是默认行为,但 Windows 需开启开发者模式或以管理员权限运行命令行;Linux/macOS 默认启用,但也可显式加
"options": {"symlink": true}在repositories条目中 - 验证是否成功:
ls -la vendor/vendor/name(Linux/macOS)应显示->指向源目录;Windows 下dir vendorendor ame应显示为“快捷方式”类型 - 如果看到的是普通文件夹,说明没走
path源,可能被 Packagist 或其他仓库覆盖了
真正容易被忽略的点是:所有路径、name、版本三者必须原子级对齐,错一位就静默失败;而且 composer install 天然不参与本地 path 的发现和链接重建——这和直觉相反,但就是它的设计逻辑。










