能用,但必须同时满足五个硬性条件:主项目 composer.json 正确声明 repositories、本地包目录含合法 composer.json、name 字段逐字匹配、启用 symlink、本地包已初始化 Git。

能用,但必须同时满足五个硬性条件:主项目 composer.json 正确声明 repositories、本地包目录含合法 composer.json、name 字段逐字匹配、启用 symlink、本地包已初始化 Git。漏一个,composer update 就静默跳过,连错误都不报。
repositories 必须写在主项目 composer.json 根级
它不能塞进 require、autoload 或 config 里,必须和它们平级。常见错法:
- 把
repositories写在本地包自己的composer.json里——对主项目完全无效 -
url写成绝对路径(如/home/user/my-pkg)或带file://前缀——Composer 直接忽略 -
url以/结尾(如"../my-pkg/")——解析失败,不报错,只 fallback 到 Packagist
正确写法示例:
"repositories": [
{
"type": "path",
"url": "../my-pkg"
}
]
本地包的 composer.json 必须合法且 name 严格一致
这是 90% 报 Could not find package 的根源。不是大小写问题,是“逐字节”问题:
- 主项目
require写的是"acme/utils": "dev-main",本地包composer.json的name就只能是"acme/utils" -
"Acme/Utils"、"acme-utils"、"acme/utils-dev"全部不匹配 - 本地包若没 Git 仓库,建议显式加
"version": "dev-main",否则 Composer 可能无法推断分支名
另外,url 指向的必须是**含 composer.json 的目录**,不是文件本身。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
symlink 不是默认行为,必须手动开启并验证
Linux/macOS 默认尝试 symlink,Windows 默认 fallback 到 copy;无论哪一平台,不显式配置就等于没开:
- 在主项目
composer.json的对应repositories条目里加"options": {"symlink": true} - Windows 用户必须以管理员身份运行终端,否则
symlink创建失败且无提示 - 首次引入必须用
composer update acme/utils,install不重建链接
验证是否成功:
- macOS/Linux:
ls -la vendor/acme/utils输出应含->指向源目录 - Windows:
dir vendorcmeutils应显示<SYMLINKD>或 “快捷方式”类型
autoload 修改后必须手动 dump-autoload
哪怕 symlink 已建好,只要改了本地包的 autoload 配置(比如新增 PSR-4 映射或调整路径),vendor/autoload.php 就不会自动识别新类:
- 必须在主项目根目录执行
composer dump-autoload - 开发阶段不用加
-o,但加了会生成更紧凑的映射表 - 确认本地包
composer.json中 autoload 的路径末尾有反斜杠(如"MyCompanyUtils\": "src/"),少一个就断掉
最常被忽略的一点:改完本地包代码后,不运行 composer update acme/utils,只靠 symlink 是不够的——Composer 不监控文件变更,它只认 composer.lock 里的记录。 symlink 是通路,update 是扳手,两者缺一不可。

















