composer require不支持路径字符串,必须通过repositories声明path仓库并严格对齐name、version和路径,否则静默失败;本地包需含合法composer.json且配置autoload,主项目须执行composer dump-autoload才能生效。

Composer path仓库是Laravel系Monorepo唯一可行的本地包加载机制,但必须手动配置、严格对齐name/version/路径,否则静默失效。
为什么直接require本地目录会失败
Composer 的 require 字段不接受路径字符串,写成 "myorg/core": "./packages/core" 会直接报错 Could not find package myorg/core。这不是缓存或权限问题,而是语法非法——Composer 只认 vendor/name 格式的包名,且必须通过 repositories 显式声明来源。
- 本地包目录下必须有合法
composer.json,至少含{"name": "myorg/core", "version": "dev-main"} -
repositories必须写在项目根composer.json的顶层,不能嵌套在require或其他字段里 -
url值只能是相对路径(如"./packages/core")或绝对路径,不能带file://或~/
如何让Laravel自动加载path包里的类
PSR-4 自动加载不会自动扫描 vendor/ 外的目录,所以即使 path 包已软链接进 vendor/myorg/core,如果它的 composer.json 没配 autoload,php artisan 仍会报 Class not found。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地包自己的
composer.json必须声明 autoload,例如:"autoload": {"psr-4": {"MyOrg\Core\": "src/"}} - 主项目执行
composer dump-autoload才会合并所有 vendor 包的 autoload 规则 - 若本地包代码有修改,不需重装,但必须运行
composer dump-autoload否则新类不生效
开发时怎么实时看到修改效果
默认情况下,composer install 对 path 包使用符号链接(Linux/macOS)或复制(Windows),但 symlink 行为不是无条件启用的。
- 要确保改本地代码立刻反映到 Laravel 中,必须显式启用软链:
"options": {"symlink": true}写在 repositories 条目里 - Windows 下启用 symlink 需管理员权限或开启“开发者模式”,否则 fallback 为复制,改了代码得手动
composer install -
composer update myorg/core才会重新解析本地包的当前 HEAD,composer install只按composer.lock恢复,不会感知你刚改的代码
CI/CD 和协作中容易忽略的关键点
本地开发能跑通,不代表 CI 环境能过。很多团队卡在这里:测试通过,上线失败。
- path 仓库只在本地有效,CI 环境没有那些子目录,必须用
--no-dev或切换为 vcs 类型仓库发布正式版本 - 不要在
composer.json里写死绝对路径(如/home/user/project/packages/core),它会在其他机器上静默跳过该仓库 - 多个 path 包之间有依赖时,它们的
require字段也得用dev-main这类开发版本号,否则 Composer 解析失败
最常被跳过的动作是:改完本地包后忘记 composer dump-autoload,或者误以为 composer install 能自动拉取最新代码——它只认 lock 文件,不认 git HEAD。










