path仓库离线可用需同时满足:type为"path"、url是本地绝对路径(无~、无./、无尾部/)、路径下有合法composer.json;否则静默忽略。

path仓库在离线环境能用,但必须满足三个硬性条件
离线时用 path 仓库不是“配完就能用”,它会静默失败——不报错、不提示、composer install 就当它不存在。根本原因在于 Composer 对 path 类型的校验极严格,漏一个就跳过。
-
type字段必须显式写成"path"(不能是"package"、不能省略) -
url必须是**本地绝对路径**:/home/user/my-pkg✅,./my-pkg❌,~/my-pkg❌,/home/user/my-pkg/(末尾带斜杠)❌ - 该路径下必须存在合法的
composer.json,且其中name和version字段要与你在主项目中require的完全一致(包括大小写)
怎么让 path 包在离线时实时生效,而不是拷贝一份?
默认行为是把源码复制进 vendor/,改源码不会自动同步——这不是 bug,是设计。要让它像软链一样联动,必须从添加仓库起就启用 symlink 模式。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 添加仓库时必须带
options字段:composer config repositories.mypkg '{"type":"path","url":"/abs/path/to/pkg","options":{"symlink":true}}' - 后续无法用
composer config补加options,必须删掉重配 - 验证是否生效:运行
ls -l vendor/vendor-name/package-name,输出应为指向源路径的符号链接,而非普通目录 - 注意:Windows 下需以管理员权限运行命令行,否则 symlink 创建失败且无提示
为什么离线时 composer install 还是连网或报错?
即使你配了 path,Composer 仍可能发 DNS 请求或卡在 packages.json 获取阶段——问题不在你的配置,而在 Packagist 的 fallback 机制没关干净。
- 必须全局禁用:
composer config --global repo.packagist false - 检查项目级配置:
composer config repo.packagist输出应为空;如果返回composer https://packagist.org,说明composer.json里还留着"repositories"条目,手动删掉 - 执行
composer install -v,观察日志里是否还有Downloading https://repo.packagist.org/packages.json——有就代表某处配置没生效 - 若项目
composer.json中写了"repositories": [{"type": "packagist", "url": false}],哪怕COMPOSER_DISABLE_NETWORK=1,也会直接退出,不是忽略
离线环境下 path 依赖的典型失败场景
这些情况不会报“找不到包”,而是表现为 composer install 成功但 vendor/ 里没东西、类加载失败、或运行时报 Class not found。
- 路径含空格或中文:命令看似执行成功,实际写入
~/.composer/config.json时被截断,用cat ~/.composer/config.json | grep -A2 mypkg查看真实内容 - 源包
composer.json缺autoload段,或psr-4映射路径错误,导致类无法被自动加载 - 目标机 PHP 版本或扩展(如
mbstring、openssl)与源包要求不匹配,composer install会跳过该包但不报错 - 用了
@dev约束但没在require里显式带上,例如写了"my-utils/my-utils": "*",必须改成"my-utils/my-utils": "@dev"才触发 path 查找

















