composer require zip包需满足三重一致性:zip文件名、内部composer.json的version、require声明的版本必须字面完全相同;zip解压后composer.json须在根目录;repositories需配置为artifact类型并指向zip所在目录(不加斜杠)。

Composer 不能直接 composer require ./package.zip ——必须用 artifact 类型仓库,且 ZIP 包结构、命名、配置三者缺一不可,否则静默跳过或报 Could not find package。
ZIP 包必须解压后根目录有 composer.json
Composer 不会递归查找 composer.json,只检查 ZIP 解压后的第一层。常见错误是把 Git 克隆下来的整个目录打包,导致解压出来是 mylib-abc123/composer.json,这会被完全忽略。
- ✅ 正确结构:
mylib-1.0.0.zip→ 解压后直接看到composer.json、src/、tests/ - ❌ 错误结构:
mylib-1.0.0.zip→ 解压后是mylib-abc123/composer.json - 修复方法:先
unzip mylib-1.0.0.zip -d tmp/,再cd tmp/mylib-abc123 && zip -r ../mylib-1.0.0-fixed.zip .,确保composer.json在顶层 -
composer.json中的name(如"acme/utils")和version(如"1.0.0")必须合法、非空
repositories 配置必须为 artifact 类型并指向 ZIP 所在**目录**
不是 ZIP 文件路径,也不是 URL;是存放 ZIP 的文件夹路径,且结尾**不加斜杠**。该路径下所有 .zip、.tar.gz 等都会被扫描。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在项目根目录的
composer.json中添加: "repositories": [ { "type": "artifact", "url": "./packages" } ]-
./packages必须存在,且 PHP 进程有读权限(Linux 下注意www-data或php-fpm用户能否读取) - 绝对路径更稳妥:
/var/www/myproject/artifacts,避免 CI 中相对路径错位 - 切勿写成
"url": "file:///path/to/packages"或"url": "./packages/"(末尾斜杠在某些系统触发异常)
require 版本必须与 ZIP 文件名或 composer.json 中的 version 严格匹配
Artifact 仓库靠文件名做初步筛选,再校验内部 composer.json。若不一致,包会被跳过,且无提示。
- 推荐 ZIP 命名格式:
vendor/name-version.zip(如acme/utils-1.0.0.zip) -
composer.json内"version": "1.0.0"必须与文件名中版本完全一致(不能是"1.0"或"v1.0.0") -
composer require acme/utils:1.0.0可行;^1.0也可,但前提是目录下存在匹配 ZIP;*不支持 - 如果 packagist.org 上有同名包,默认仍会优先走线上源——务必加
"packagist.org": false到repositories顶层
安装前必须手动放好 ZIP,且运行 composer update(不是 install)
composer install 不会重新扫描 artifact 目录,它只按 composer.lock 安装。新 ZIP 加入后,必须让 Composer 重新索引并写入 lock 文件。
- 把
acme/utils-1.0.0.zip放进./packages/ - 执行
composer update acme/utils --no-cache(加--no-cache避免旧缓存干扰) - 若报
Could not find a matching version,先运行composer clear-cache,再确认composer show -s输出中packagist.org已被禁用 - 装完发现类找不到?检查
composer.json中autoload路径是否相对于 ZIP 解压后的根目录(例如"psr-4": {"Acme\": "src/"},则 ZIP 里必须有src/目录)
最易被忽略的是三重一致性:ZIP 文件名中的版本、内部 composer.json 的 version、require 中写的版本,三者必须字面完全相同;差一个字符,Composer 就当它不存在。










