必须用 artifact 类型仓库配置本地 ZIP 包,ZIP 文件名、内部 composer.json 的 name/version 字段三者须字面完全一致,且需禁用 packagist.org 才能离线安装成功。

直接用 composer install 装本地 ZIP 包,必须配 artifact 类型仓库,且 ZIP 文件名、内部 composer.json、require 版本三者必须字面完全一致,否则静默跳过或报 Could not find package。
artifact 仓库配置必须写对路径和类型
在项目根目录的 composer.json 中加 repositories 块,type 必须是 artifact,url 是 ZIP 所在**目录的路径**(不是 ZIP 文件本身),且末尾不能加 /:
-
url推荐用绝对路径(如/opt/myproject/artifacts),避免 CI 或不同用户执行时因相对路径错位失效 - 写成
"url": "file:///path/to/zips"或"url": "./zips/"(带斜杠)会触发路径解析异常,某些 Composer 版本直接忽略该仓库 - 目录必须真实存在、PHP 进程可读(Linux 下注意
www-data或php-fpm用户权限) - 不能嵌套子目录:所有 ZIP 必须平铺在
url指向的目录下,不支持./zips/monolog/monolog-3.5.0.zip
ZIP 文件命名和结构有硬性要求
Composer 不会解压并扫描内容来猜包信息,它靠文件名初步筛选,再校验 ZIP 内部 composer.json。错一个就找不到:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 文件名格式必须为
vendor/name-version.zip(注意是/,不是-或\),例如monolog/monolog-3.5.0.zip - ZIP 解压后,
composer.json必须在根目录(不能是monolog-monolog-3.5.0/composer.json) -
composer.json中的name字段(如"monolog/monolog")和version字段(如"3.5.0")必须与文件名中对应部分**完全一致**(大小写、有无v前缀、是否含-beta1等) - 不支持
.tar.gz在 Windows 下稳定解压,统一用.zip
必须禁用 packagist.org 否则仍会联网
哪怕你配了 artifact,只要 packagist.org 还开着,Composer 默认优先查线上源——哪怕本地 ZIP 已存在,它也会先尝试回源,失败才 fallback,导致离线失败:
- 在
repositories数组最顶部加{"packagist.org": false} - 不要只依赖
COMPOSER_DISABLE_NETWORK=1,它是兜底手段,不能替代显式禁用默认源 - 运行
composer show -s确认输出里没有packagist.org,才算生效 - 如果之前跑过
composer install,缓存可能干扰判断,加--no-cache重试
安装命令和版本写法不能错
artifact 不做版本约束解析,只做精确匹配。你写的版本号必须和 ZIP 文件名里的版本一模一样:
- 运行
composer require vendor/name:1.2.3,不是^1.2或*(后者不支持) - 如果 ZIP 是
acme/utils-2.1.0.zip,composer.json里require必须写"acme/utils": "2.1.0",写成"2.1"或"v2.1.0"都会失败 - 首次安装建议用
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts,跳过远程校验和脚本执行,直奔本地 ZIP - 改过 ZIP 后,必须删掉
vendor/和composer.lock,再重新install,否则旧 lock 会锁住旧 dist URL
最容易被忽略的是:ZIP 文件名中的 vendor/name 和内部 composer.json 的 name 字段必须**逐字符一致**,连空格、大小写、斜杠方向都不能差——这一步出错,整个流程不会报错,只会安静地跳过你的包。

















