composer 不支持直接 require zip 文件路径,必须通过 artifact 类型仓库配置目录,且 zip 包文件名、内部 composer.json 的 name 和 version、require 中的包名三者严格一致,否则静默失败。

不支持直接引用 ZIP 文件路径,必须通过 artifact 类型仓库配置目录,且 ZIP 包结构、命名、配置三者严格匹配,否则静默失败或报 Could not find package。
为什么 composer require ./pkg.zip 一定报错
Composer 不解析 ZIP 文件路径作为包源——它会把 ./pkg.zip 当作包名,去 packagist.org 查找,自然返回 Could not find a version of package ./pkg.zip 或 Invalid argument supplied for foreach()。根本原因:Composer 的 require 命令只接受 vendor/name:version 格式,不接受文件路径或 URL。
- ZIP 必须放在一个**目录里**,不能单独丢一个文件让 Composer “猜”
- 该目录需通过
repositories显式声明为artifact类型 - Composer 不会下载、解压、读取任意 ZIP;它只扫描指定目录下的
.zip/.tar.gz,并依赖其中composer.json的name和version字段
artifact 仓库的 url 怎么写才有效
url 是 ZIP 所在**目录的路径**,不是 ZIP 文件本身,且末尾**不能加 /**——加了会导致某些 Composer 版本(如 2.5+)拼出 //,路径解析失败,整个仓库被忽略。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- ✅ 推荐绝对路径:
"url": "/opt/myproject/artifacts" - ✅ 可用相对路径(但仅限项目根目录下执行):
"url": "artifacts"(注意无斜杠) - ❌ 错误写法:
"url": "artifacts/"、"url": "file:///path/to/zips"、"url": "./zips" - 目录必须真实存在,且 PHP 进程可读(Linux 下注意
www-data或php-fpm用户权限)
ZIP 包文件名和内部 composer.json 必须三重一致
Composer 从 ZIP 安装时,会同时检查三项:文件名中的 vendor/name-version、内部 composer.json 的 name 和 version 字段。三者字面完全一致才匹配成功,否则跳过该 ZIP,不报错也不提示。
- ✅ 正确示例:
acme/utils-3.1.0.zip→ 解压后根目录有composer.json,内容含"name": "acme/utils"和"version": "3.1.0" - ❌ 错误示例:
utils-3.1.0.zip(缺 vendor);acme-utils-3.1.0.zip(name是acme/utils,但文件名没斜杠);acme/utils-3.1.0.zip但composer.json里version是"3.1" - ZIP 内部结构必须扁平:
composer.json必须在解压后第一层,不能是mylib-3.1.0/composer.json
必须禁用 packagist.org 否则本地包可能被忽略
artifact 仓库默认优先级低于 packagist.org。如果网络通畅,Composer 会先去线上查包,即使本地 ZIP 已就位,也可能跳过它,导致 composer install 拉的是线上版本而非你预期的 ZIP。
- 显式禁用默认源:
"packagist.org": false加到repositories数组中 - 完整配置示例:
{ "repositories": [ { "type": "artifact", "url": "/opt/myproject/artifacts" }, { "packagist.org": false } ], "require": { "acme/utils": "3.1.0" } } - 运行
composer update acme/utils而非install更可靠,避免 lock 文件干扰
最容易被忽略的是三重一致性——文件名、composer.json 的 name、require 中写的包名,差一个字符(比如大小写、斜杠、连字符)就会静默失效,连 warning 都不输出。调试时建议先手动解压 ZIP,确认 composer.json 是否真在根目录、字段是否拼对,再核对文件名格式。










