核心三点:主项目composer.json须声明type为path的repositories、本地包目录须有合法composer.json、且二者name字段必须逐字一致;缺一即静默失败,转向packagist查找并报“could not find package”。

直接在已有项目中配置本地包,核心就三点:主项目 composer.json 声明 path 仓库、本地包目录下有合法的 composer.json、且两者 name 字段必须逐字一致。漏掉任一,composer install 或 update 都会静默跳过,转头去 Packagist 找包,然后报 Could not find package。
主项目 composer.json 必须加 repositories.path
不能只改 require,必须在根目录 composer.json 的 repositories 字段里显式声明路径源:
-
url必须是相对路径(如"../my-pkg"或"./packages/utils"),绝对路径(C:/work/my-pkg)和环境变量(~/my-pkg)一律无效 -
type必须为"path",写成"package"或漏写会彻底失效 - 别把
repositories错放在本地包自己的composer.json里——它对主项目没任何作用
本地包 composer.json 的 name 必须和 require 完全匹配
这是 90% 装不上的根本原因。大小写、vendor 名、分隔符都必须严丝合缝:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 主项目
require写的是"acme/utils": "dev-main",那本地包composer.json的name就只能是"acme/utils",不能是"Acme/utils"、"acme-utils"或"acme/utils-dev" - 如果本地包还没初始化 Git,建议在它的
composer.json里加"version": "dev-main",否则 Composer 无法推断分支版本 - 别用
"*"或"@dev"这类模糊约束——它们会让 Composer 绕过path源,直连 Packagist
改代码不生效?大概率没启用 symlink
默认情况下,path 仓库走的是复制(copy)模式,改本地包代码不会反映到 vendor/ 下。要热更新,必须启用符号链接:
- 在主项目
composer.json的对应repositories条目里加:"options": {"symlink": true} - Windows 用户必须以管理员身份运行终端,或开启“开发者模式”,否则
symlink会静默 fallback 到 copy - 首次引入必须用
composer update vendor/name(不是install),因为install只读composer.lock,不重新解析仓库类型 - 验证是否成功:
ls -la vendor/vendor/name(macOS/Linux)应看到->指向源目录;Windows 上dir vendor\vendor\name应显示“快捷方式”类型
autoload 修改后 vendor/autoload.php 不认新类?
哪怕 symlink 已建好,只要改了本地包的 autoload 映射(比如新增 PSR-4 命名空间或调整路径),就必须手动刷新自动加载器:
- 进主项目根目录,执行:
composer dump-autoload -o - 不加
-o(optimize)也行,但加了会生成更高效的映射表 - 这步和
update无关,改完composer.json的autoload段就要立刻跑一次 - 如果本地包用了自定义
files加载,也要确保这些文件路径在 symlink 后仍可被正确读取
最常被忽略的其实是 Git 状态:本地包目录下没 git init、没 commit,Composer 会直接跳过该目录,连报错都没有。哪怕你路径、name、symlink 全对,只要没 commit,就等于没包。










