必须在主项目composer.json根级配置repositories,本地包name、路径、版本须严格匹配,否则composer静默跳过;需用相对路径、合法json、显式dev-main版本、本地包内设symlink选项并管理员权限执行update。

不能只改 require,必须在主项目 composer.json 根级写 repositories,并确保本地包 name、路径、版本三者严丝合缝,否则 Composer 静默跳过,报 “Could not find package” 不是网络问题,是你根本没配对。
repositories 必须写在主项目 composer.json 的根级
Composer 只读主项目根目录下 composer.json 最外层的 repositories 字段,其他位置写的全无效。常见错误包括:
- 把
repositories塞进require、autoload或config里 —— 完全不解析 - 在本地包自己的 composer.json 里写 repositories —— 对主项目毫无作用
- 用绝对路径(如
"C:/dev/my-pkg")或file://前缀 —— 应该用相对于主项目 composer.json 的路径,例如"../my-pkg"或"./packages/utils" -
url指向的是目录,不是composer.json文件本身;末尾不能加/("../my-pkg/"会静默失效)
本地包 composer.json 必须合法且 name 逐字匹配
Composer 不认“目录存在”,只认 name 和 version 字段是否合规。90% 的失败源于这里:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
name必须和require中写的**完全一致**:大小写、短横线-、斜杠/全部敏感("acme/utils"≠"Acme/utils"≠"acme_utils") -
version字段建议显式写"dev-main"(尤其未初始化 Git 时),避免依赖分支推断 - 本地包目录下必须有语法合法的 composer.json(无尾逗号、全双引号、JSON 格式正确)
- 若要用
dev-main,本地包目录下需有 Git 仓库(至少git init && git add . && git commit -m "init")
启用 symlink 才能实时生效,但配置点不在主项目
默认行为是复制(copy),改本地代码不会反映到 vendor/。要热更新,关键不是主项目配 "symlink": true,而是:
- 在本地包自己的 composer.json里加:
"options": {"symlink": true} - Windows 用户必须以管理员身份运行终端,否则 symlink 创建失败且无提示
- 首次引入必须用
composer update vendor/name(不是install),因为install只读 lock 文件 - 验证是否真链接成功:
ls -la vendor/vendor/name(Linux/macOS)应看到->;Windows 上dir vendorendor ame应显示“JUNCTION”或“快捷方式”
autoload 映射必须独立配置且手动刷新
path 仓库让包“装进去”,但类能否 use 或 new,取决于 autoload 是否映射到真实路径:
- 本地包 composer.json 中
autoload必须正确声明 PSR-4,例如:"psr-4": {"Acme\Utils\": "src/"}(注意双反斜杠和路径末尾无多余字符) - 修改后必须手动执行
composer dump-autoload,否则新映射不会写入vendor/composer/autoload_static.php - 如果测试类在
tests/下且用了autoload-dev,映射末尾必须带反斜杠:"Acme\Tests\": "tests/" - 别在
require 'vendor/autoload.php'前就 new 类,也别手动 require 源文件
最常被忽略的其实是 symlink 的生效条件:它依赖本地包自身 composer.json 的 options,而不是主项目的任何配置;且 Windows 权限、Docker 能力、Git 初始化状态,任何一个环节断掉,都会 fallback 成 copy,而你几乎看不到任何错误提示。










