离线存档必须包含packages.json和所有vendor-name-package-name-version.zip包,缺一不可;需用packagist-mirror导出,配置composer+artifact双源并设COMPOSER_DISABLE_NETWORK=1才能实现断网下完整install流程。

离线存档不是“把 vendor 目录 zip 一下就完事”,而是要让 composer install 在断网时能完整走完元数据读取 → 版本解析 → 包解压 → autoload 生成全流程。中文镜像(如阿里、腾讯)只是加速下载,不改变 Composer 的离线行为逻辑——它依然依赖 packages.json 和 ZIP 包的严格配对。
离线存档必须包含 packages.json + 所有 dist ZIP 包
只导出 ZIP 文件或只复制 vendor/ 都会失败:前者缺元数据,Composer 报 Could not fetch packages.json;后者缺版本索引,composer require 或 update 完全不可用。
-
packages.json必须放在镜像根目录,内容需覆盖项目所有直接/间接依赖(比如monolog/monolog依赖psr/log,这个包的元数据也得存在) - ZIP 文件名必须是
vendor-name-package-name-version.zip格式(如monolog-monolog-3.5.0.zip),不能带下划线、斜杠或额外后缀 - 推荐用
packagist-mirror工具导出,比手写脚本更可靠;若手动构造,务必用composer archive验证 ZIP 内容与composer.lock中的dist.shasum一致
中文镜像源导出后,如何配置本地 artifact + composer 类型源
单纯把镜像文件拷进内网没用——Composer 默认仍会去 https://repo.packagist.org 拉元数据。必须显式配置两类源并禁用网络:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 在项目
composer.json顶部加:{"repositories": [{"type":"composer","url":"file:///path/to/mirror"},{"type":"artifact","url":"./packages/archives"}]} -
composer类型源读packages.json(提供元数据),artifact类型源读 ZIP(提供包体),二者缺一不可 - 执行前必须设环境变量:
COMPOSER_DISABLE_NETWORK=1,否则插件(如symfony/flex)可能绕过配置偷偷联网 - 删掉全局干扰项:
composer config -g --unset repo.packagist和composer config -g --unset http-proxy
验证是否真正离线生效
别只看有没有报错,要看日志里实际走的是哪条路径:
- 加
-v运行composer install,输出中应出现Reading packages.json from file:///path/to/mirror/packages.json,而不是Downloading https://repo.packagist.org/ - 临时往
/etc/hosts(Windows 是%SystemRoot%\System32\drivers\etc\hosts)加一行127.0.0.1 packagist.org,再跑命令——看到Connection refused才算真正切断网络 - 如果
composer.lock里某包的dist.url是https://开头,且没配本地源,COMPOSER_DISABLE_NETWORK=1下会直接退出,不给你机会补救
最易被忽略的是 ZIP 文件名格式和 packages.json 的完整性——漏一个间接依赖的元数据,或者 ZIP 名多了一个下划线,composer install 就会在某个包上卡住,错误信息却只显示模糊的 Package not found。

















