必须三者同时满足:repositories正确声明path类型及路径、require版本用"@dev"等通配写法、本地包composer.json的name字段与require完全一致,否则composer静默跳过并报“could not find package”。

能,但必须三件事同时做对:repositories 正确声明路径、require 版本写对、本地包 composer.json 的 name 完全匹配——缺一不可,否则 composer install 静默跳过,报错却只说 Could not find package。
repositories 怎么写才被识别
Composer 不会自动扫描子目录或同级目录,它只认你项目根目录 composer.json 里 repositories 字段声明的内容。这个字段必须是顶层数组,不能嵌在 config 或 require 里。
-
url必须是相对路径(如../my-package)或绝对路径(如/Users/me/my-package),不能带file://前缀,也不能用~/ - Windows 下路径要用正斜杠
/(如C:/dev/my-package),单反斜杠\会导致解析失败 - 该路径必须已存在,且目录下有合法的
composer.json(无语法错误、双引号、无尾逗号) - 通配符支持
packages/*,但不支持多层(packages/**无效)
require 写什么版本才能命中本地包
Path 仓库不走语义化版本解析,也不查 Git 分支,它只做字符串比对或通配匹配。写错版本号,Composer 就直接放弃本地路径,转头去 Packagist 找。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 最稳妥是写
"myorg/utils": "@dev"——@dev是唯一能通配任意本地version字段(甚至没写version)的标记 - 写
"dev-main"会触发分支查找逻辑,而本地路径下没 Git,必然失败 - 如果本地包
composer.json明确写了"version": "1.0.0",那"1.0.0"也能命中,但不如@dev灵活 - 大小写、vendor 名、分隔符(
/)必须和本地包name字段完全一致,MyOrg/Utils≠myorg/utils
为什么 vendor 里是复制不是软链接
默认行为就是复制,这是 Composer 为构建稳定性做的保守设计。软链接(symlink)必须显式启用,且只对 path 类型仓库生效。
- 推荐方式:在**本地包自己的
composer.json** 中加"options": {"symlink": true}(注意:不是主项目的配置) - 替代方式:主项目
composer.json的config里设"preferred-install": {"myorg/utils": "source"} -
composer install不创建 symlink;必须执行composer update myorg/utils或全量composer update - 验证是否成功:
ls -la vendor/myorg/utils(macOS/Linux)应显示->指向源路径;Windows 用户可用dir vendor\myorg\utils看是否为“快捷方式”类型
改了本地包代码却不生效?别只盯 require
软链接建好了,不代表类就能自动加载。autoload 映射没更新,或者 opcache 没清,照样报错“类不存在”或“方法还是旧的”。
- 改完本地包代码后,不需要
composer update,但要运行composer dump-autoload -o重生成优化后的自动加载映射 - 如果用了 OPcache(如 PHP-FPM 环境),需手动清除缓存:
opcache_reset()或重启服务 - 检查本地包
composer.json的autoload是否正确:PSR-4 映射路径是否与实际文件结构一致,命名空间是否拼写准确 - CI/CD 环境天然不适用 path 仓库——服务器上根本没有你的本地路径,上线前务必移除
repositories配置并切回正式发布版
最容易被忽略的是:path 仓库的生效依赖于三重严格匹配——路径存在、name 一致、版本可通配。任何一个环节松动,Composer 就退回默认行为,而错误提示往往指向“找不到包”,实际问题却藏在配置深处。










