必须三处完全对齐:本地包composer.json的name、项目repositories的url路径、require的包名字符串;缺一不可,错一个就静默失败。

能用,但必须三处完全对齐:本地包 composer.json 的 name、项目 composer.json 中 repositories 的 url 路径、require 里的包名字符串——缺一不可,错一个就静默失败。
本地包的 composer.json 必须合法且带 name 和 version
Composer 不会解析目录名或文件结构来猜包名,它只读取本地包根目录下的 composer.json 并严格校验字段:
-
name字段必须是 vendor/name 格式,仅含小写字母、短横线-,不能有下划线_或大写,例如"acme/utils"≠"Acme/Utils" -
version可写"dev-main"、"dev-develop"或"1.0.x-dev";若没打 Git tag,别写"1.0.0",否则composer require会找不到匹配版本 - 文件本身语法要合法:全双引号、无尾逗号、UTF-8 编码(Windows 下避免 BOM)
- 目录下必须有至少一个 Git commit(
git init && git add . && git commit -m "init"),否则 Composer 拒绝加载
项目 composer.json 的 repositories 配置必须写对位置和格式
这个配置不是可选的“补充说明”,而是唯一入口。错放位置、类型写错、路径写崩,都会导致 Composer 完全无视本地包:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须放在项目根目录
composer.json的**根级**repositories数组里,不能塞进require、config或其他字段 -
type必须是"path",不是"package"或"vcs" -
url是相对于项目composer.json的路径,如"../my-utils"或"./packages/sdk";末尾不能加/,"../my-utils/"会被静默跳过 - 不支持
file://协议、环境变量(如$HOME)、波浪号(~);Windows 下推荐用正斜杠/或双反斜杠\ - 整个
repositories是数组,哪怕只配一个,也要写成[{ "type": "path", "url": "./packages/my-pkg" }]
composer require 的写法决定是否真走本地路径
很多人以为只要配了 repositories 就万事大吉,其实 require 行写错,Composer 仍会去 Packagist 找包:
-
require字段只接受"vendor/name": "version"格式,**绝不支持路径值**,比如"acme/utils": "./packages/acme-utils"是非法且无效的 - 版本约束必须匹配本地包的分支或
version字段,常见写法:"acme/utils": "dev-main"、"acme/utils": "dev-main@dev"(如果项目设了"minimum-stability": "dev") - 执行命令时用
composer require acme/utils:dev-main,不是composer install—— 后者只按composer.lock恢复,不会重新解析仓库 - 首次安装后,改了本地包代码,想刷新链接必须运行
composer update acme/utils;composer install对已有依赖完全不做任何事
验证 symlink 是否生效,比看 vendor/ 文件夹更可靠
你看到 vendor/acme/utils 存在,不代表它连的是本地代码。很多问题都出在 fallback 到复制(copy)而非软链(symlink):
- Linux/macOS 下运行
ls -la vendor/acme/utils,输出含->指向你本地路径才是成功;若显示普通目录结构,说明 fallback 成复制 - Windows 下运行
dir vendorcmeutils,看到<symlinkd></symlinkd>或JUNCTION才是软链;普通文件夹 = 失败 - 软链失败的主因:本地包自己的
composer.json缺"options": {"symlink": true};Windows 需管理员权限运行终端;Docker 需加--cap-add=SYS_ADMIN - autoload 不生效?不是 Composer 没加载,而是类映射没更新——改完本地包代码后,手动跑一次
composer dump-autoload -o才行
最常被忽略的一点:生产部署时,repositories 里的 path 条目必须移除,否则上线直接报错;它只该活在开发环境,不该进版本库——用 studio 工具或构建脚本动态注入,才是可持续的做法。










