离线环境安装 dev 分支必须用 path 或 artifact 仓库类型,禁用 packagist;path 要求本地目录含完整 composer.json 且配置相对路径,artifact 要求 zip 命名规范并含匹配 version 的 composer.json。

离线环境不能用 dev-master 或 @dev 直接安装
只要 composer install 看到 "version": "dev-master" 或 require 里写了 monolog/monolog:@dev,它就会尝试去 Git 仓库 fetch 元数据甚至 clone —— 即使设了 COMPOSER_DISABLE_NETWORK=1,也会直接报错:Could not load package monolog/monolog in http://repo.packagist.org: [Composer\Downloader\TransportException] The "https://api.github.com/repos/Seldaek/monolog/commits/dev-master" file could not be downloaded。这不是证书或权限问题,是 Composer 对 @dev 的硬性联网要求。
-
@dev和dev-*版本本质依赖 Git 源,离线时无替代路径 -
path类型仓库可绕过,但必须满足:本地目录含完整composer.json(name、version、autoload齐全),且 require 时显式加@dev - 若
composer.lock里已有"source": {"type": "git", ...},该锁文件本身就不支持离线 —— 必须重生成
path 仓库怎么配才真正离线可用
这是唯一能稳定落地的非稳定版离线方案,但细节极易出错。核心不是“指向目录”,而是让 Composer 完全跳过远程解析,只读本地文件。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 包目录必须放在项目内(如
./packages/timber-dev/),不能是绝对路径(/home/user/timber)或上层路径(../timber) -
composer.json中name字段必须和require语句完全一致(大小写敏感),例如:"name": "timber/timber"→composer require timber/timber:@dev - 必须在项目级配置仓库:
composer config repositories.timber-dev '{"type":"path","url":"./packages/timber-dev"}' - 关键一步:禁用 Packagist fallback,否则 Composer 仍会尝试查远程:
composer config repo.packagist false - 验证是否生效:运行
composer install -v,输出中不应出现任何Downloading或GET远程 URL
想装 dev 分支但没源码?只能提前打包成 artifact
如果你只有开发分支的 ZIP 包(比如从 GitHub Actions 下载的 timber-timber-abc123.zip),就别碰 @dev,改用 artifact 仓库类型。它不认分支名,只认文件名和 SHA256 校验值。
- ZIP 包命名必须严格为
vendor-name/package-name-version.zip(例:timber/timber-dev-abc123.zip) - 包内根目录必须含有效
composer.json,且version字段要和文件名中 version 一致(哪怕写的是"dev-abc123") - 把所有 ZIP 放进一个平铺目录(如
/opt/artifacts/),不要嵌套子目录 - 配置:
composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}' - 执行前务必清掉 Packagist:
composer config --global repo.packagist false,否则 artifact 不生效
为什么 cache-files-dir 对 dev 分支无效
cache-files-dir 只缓存 --prefer-dist 下载的正式版 ZIP,而 dev 分支默认走 --prefer-source(Git clone)。即使你强制加 --prefer-dist,Composer 也会因找不到匹配的 dist URL 而 fallback 到 source,最终失败。
- 离线机上
cache-files-dir目录下出现timber/timber/dev-master/...路径?那是假象 —— 实际文件是空的或根本没写入 - 别试图用
composer config cache-files-dir绑定开发分支,它不处理 Git commit hash 或 branch 名 - 真正能复用的只有 artifact ZIP 和 path 目录,其他都是徒劳
path),还是带构建产物迁移(artifact)。选错类型,再细的参数也救不回来。










