必须用./或../开头,因composer将url视为http路径拼接而非文件系统路径,“my-package”会被误判为域名而跳过,仅“./packages/my-utils”等相对形式才被识别为本地目录。

必须用 repositories 声明 type: "path",且 url 以 ./ 或 ../ 开头;绝对路径、file://、环境变量、波浪号全部静默失效。
为什么相对路径必须带 ./ 或 ../?
Composer 不解析文件系统路径,只认“相对于项目 composer.json 的目录”。它把 url 当作一个 HTTP 路径来拼接(哪怕离线),所以 "my-package" 会被当作域名或包名处理,直接跳过;而 "./packages/my-utils" 才被识别为本地子目录。
-
./表示同级目录,如主项目和包都在/work/project/和/work/packages/utils/,则 url 写"../packages/utils" -
../是最常用写法,尤其包在项目外时;Windows 下也支持,但需用正斜杠(C:/dev/my-pkg会静默失败,应写../my-pkg并确保盘符一致) - 路径末尾不能带
/composer.json——url必须指向含composer.json的目录,不是文件本身
repositories 配置写在哪?怎么验证生效?
必须写在主项目根目录的 composer.json 文件顶层 repositories 数组里,不是本地包自己的 composer.json,也不是 extra 或 require 字段下。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确结构:
"repositories": [{ "type": "path", "url": "./packages/my-utils" }] - 执行
composer config repo.packagist,输出应为空(否则 Packagist 仍可能干扰) - 运行
composer show -a | grep my-utils,若没出现,说明仓库未加载——常见原因是本地包缺composer.json或name不匹配
本地包 composer.json 有哪些硬性要求?
Composer 会扫描该目录,但只要不满足以下任一条件,就完全跳过,不报错也不提示:
-
name字段必须和主项目require中写的完全一致(包括大小写、vendor 前缀),例如"acme/utils" - 目录必须已执行
git init && git commit——无 commit 的空 git 仓库也会被忽略 -
version可省略,但主项目require时必须用dev-main、dev-develop这类分支名,不能写"1.0.0" - 若想软链接而非复制,需在本地包的
composer.json中加"options": {"symlink": true}(仅composer update生效)
离线环境下怎么确保 composer install 真的不联网?
即使配置了 path 仓库,composer install 默认仍会尝试访问 repo.packagist.org 校验元数据。必须三者同时满足:
- 全局禁用:
composer config --global repo.packagist false - 项目级确认:
composer config repo.packagist输出为空 - 执行时加环境变量:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader
漏掉 --no-plugins 可能触发 phpstan、extension-installer 等插件悄悄发请求;--no-autoloader 则防止某些自定义加载器在生成阶段尝试远程探测。










