composer 通过根 composer.json 的 repositories 配置识别本地子包,需用相对路径(如 "packages/utils" 或 "packages/*"),子包必须含正确 name 字段且大小写严格匹配 require 声明,修改后需 clear-cache,符号链接失败可加 "options": {"symlink": true} 强制启用。

怎么让 Composer 找到本地子包?关键在 repositories 配置
Composer 默认只认 Packagist,不自动扫描你仓库里的 packages/ 目录。必须手动告诉它:“这些路径下有合法包”。
-
repositories必须写在根目录的composer.json里,不是子包自己的文件中 - 路径是相对于根目录的,比如子包在
packages/utils,url就得写"packages/utils"或通配"packages/*"(注意:不支持**递归) - 每个匹配目录下必须有有效的
composer.json,且含"name"字段,比如"myorg/utils" - 别用绝对路径——协作时别人机器上路径不同,
url会直接失效
为什么 require 写了却装不上本地包?版本约束和包名大小写最常翻车
现象:运行 composer require myorg/utils,结果还是从 Packagist 下载了旧版,或者报 could not find package。
- 子包
composer.json中的"name"必须和require里写的**完全一致**,包括大小写、斜杠方向(myorg/utils≠MyOrg/Utils) - 版本约束别混用:
"*"、"*@dev"、"dev-main"都行,但别写"^1.0"—— Composer 会优先选 Packagist 上已发布的1.x版本,跳过本地 - 改完
repositories或子包composer.json后,记得先composer clear-cache,否则可能读缓存导致识别失败
符号链接没生效?检查 symlink 和系统权限
预期是 vendor/myorg/utils 指向 packages/utils,结果却是复制了一份——说明软链失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 默认行为是创建符号链接,但某些场景会退化为复制(比如
--no-dev或COMPOSER_HOME权限问题) - Windows 用户需确认终端是否以管理员身份运行,或已启用“开发者模式”(否则
mklink被禁用) - 可显式加
"options": {"symlink": true}到 path 仓库配置里,强制启用(2026 年主流 Composer 版本均支持) - Linux/macOS 上若仍失败,检查
vendor/所在文件系统是否挂载了noexec或nosymfollow
子包之间互相依赖,怎么避免循环或加载错乱?
比如 user-service require data-validator,而 data-validator 又 require core-utils —— 这种链式依赖在 Monorepo 里很常见,但容易漏配。
- 所有被依赖的子包,都必须落在
repositories的url覆盖范围内,不能只配一级 - 推荐统一用
"packages/*"+"apps/*"多条 path,而不是只写一个"packages"(后者不会匹配子目录) - 子包自己的
composer.json里**不要**再写repositories—— 全部由根项目统一声明,否则 Composer 解析时可能冲突或忽略 - 如果某个子包暂时不想被其他项目引用,就别放
name,或把它移出packages/目录(比如放到drafts/)
Monorepo 不是靠工具自动变聪明,而是靠路径、命名、版本三者对齐才能稳住。最容易被忽略的是:子包 composer.json 里没写 autoload,结果类根本找不到——这和 Composer 能否发现包是两回事。










