composer 仅通过合法 composer.json 识别本地包,需含正确 name 字段、无语法错误、与 require 完全一致;repositories 必须置于主项目根 composer.json 顶层数组,url 用相对路径;启用 "symlink": true 实现实时更新;生产环境须移除 path 配置。

本地包目录必须有合法 composer.json 才能被识别
Composer 不会扫描目录内容,只读取 composer.json 文件并校验其结构。如果本地包目录下没有该文件,或文件中缺 name 字段、JSON 语法错误、name 大小写与 require 中不一致,Composer 就会静默跳过这个仓库,连警告都不报。
常见错误现象:Could not find a matching version of package vendor/name,本质不是网络问题,而是 Composer 根本没“看到”你那个目录。
-
name必须和require中写的完全一致(例如"acme/utils",不能是"Acme/Utils") -
version字段可写"dev-main"或"1.0.x-dev",但 path 类型下它仅作占位,实际以 Git HEAD 分支名为准 - 目录需至少有一个 Git commit(
git init && git add . && git commit -m "init"),否则 Composer 拒绝加载
repositories 必须写在主项目根 composer.json 的顶层数组里
配置位置错,等于没配。很多人把 repositories 塞进 require、config 或本地包自己的 composer.json,结果全无效。
正确写法是:在你当前正在开发的项目的根目录 composer.json 中,添加一个根级字段:
{
"repositories": [
{
"type": "path",
"url": "../my-package"
}
],
"require": {
"acme/utils": "dev-main"
}
}
-
url必须是相对路径(从当前composer.json所在位置算起),如"../my-package"或"./packages/utils" - 绝对路径(
/home/user/pkg或C:\pkg)在多数 CI/CD 或跨机器场景下会静默失败 - 不要加
file://前缀,也不要用~或环境变量
改本地代码不生效?默认是复制,不是软链
执行 composer install 或 composer update acme/utils 后,vendor/acme/utils 默认是完整复制的副本——你改 ../my-package/src/Helper.php,vendor/ 里还是旧文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
要实时生效,必须启用符号链接:
- 在主项目
composer.json的对应repositories条目里加"options": {"symlink": true} - 或在本地包自己的
composer.json里加同样字段(效果等价) - Windows 用户需开启「开发者模式」或以管理员权限运行命令行,否则
symlink创建失败且无提示 - 执行
composer update acme/utils(不是dump-autoload)才会重建链接
验证是否成功:ls -la vendor/acme/utils 应显示指向源目录的箭头;Windows 下用 dir vendorcmeutils 看是否为「快捷方式」类型。
生产部署前务必清理或隔离 path 配置
path 仓库在生产服务器上找不到对应路径时,composer install 会直接报错退出,不会自动 fallback 到 Packagist 或其他源——这是设计使然,不是 bug。
这意味着:把带 repositories 的 composer.json 直接提交到版本库,CI 构建或线上部署大概率失败。
- 推荐做法:用
composer config --global path.repo.symlink true全局启用软链,但repositories配置本身仍保留在开发机上,不提交 - 更稳妥方案:用 Studio 工具管理本地包,它通过临时 patch
composer.json实现覆盖,不影响版本控制 - CI 流程中应确保
composer.json不含任何path类型仓库,或用构建脚本动态移除
最易被忽略的一点:即使你本地用 path 调试再顺,所有本地包也必须有对应的远程源(GitHub + Packagist),否则团队协作和部署就断了链。










