artifact仓库url必须指向含zip文件的目录而非zip本身,且zip命名、内部composer.json内容须严格匹配;需禁用packagist.org并执行update才能使新zip生效。

artifact仓库的url必须指向目录,不能是ZIP文件本身
写成 "url": "./packages/mylib-1.2.0.zip" 或 "url": "file:///path/to/pkg.zip" 会直接报错 Invalid repository type "artifact"。Composer 要求 url 是一个真实存在的、可读的目录路径,所有 ZIP 文件必须平铺放在此目录下。
常见错误包括:
- 路径末尾加了斜杠(如
"./packages/"),某些 Composer 版本会忽略该配置 - 用相对路径但执行用户(如 CI 中的
www-data)不在项目根目录,导致路径解析失败 - 目录权限不足,PHP 进程无法读取 ZIP 文件
推荐做法是使用绝对路径(如 /opt/myproject/artifacts),并确认该路径存在且 ls -l /opt/myproject/artifacts 可见 ZIP 文件列表。
ZIP文件名和内部composer.json必须字面完全一致
Composer 不解压校验内容,而是靠文件名反向推导包信息。不一致就会静默跳过,不是报错——你执行 composer require acme/utils:1.2.0 却提示“could not find package”,大概率是这里错了。
必须满足以下全部条件:
- 文件名格式为
vendor/package-version.zip(注意是斜杠,不是中划线),例如acme/utils-1.2.0.zip - ZIP 解压后,
composer.json必须在根目录,不能嵌套在子文件夹里 -
composer.json中的"name"字段(如"acme/utils")和"version"字段(如"1.2.0")必须与文件名中出现的字符串**逐字符一致** -
version必须是语义化版本,不支持dev-main、v1.2.0等写法
生成建议用 composer archive --format=zip --dir=./packages/,它自动处理命名与结构;别手动改完 composer.json 再打包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
禁用packagist.org必须显式声明,且不能只靠repositories覆盖
只在 repositories 里加 artifact 源,却不关掉默认源,composer install 仍会 fallback 到 packagist.org,甚至触发 DNS 查询——你看到 Downloading https://repo.packagist.org/packages.json 就说明没生效。
正确做法是两步都做:
- 在
composer.json顶层加"packagist.org": false(注意键名是packagist.org,不是packagist或布尔值放错位置) - 运行
composer config --global repo.packagist false彻底关闭全局默认源 - 检查项目级配置:执行
composer config repo.packagist,输出应为空;若显示composer https://packagist.org,说明某处残留配置未清理
执行 composer install -v 可观察真实请求地址,这是验证是否真正离线的最可靠方式。
composer install不会自动发现新ZIP,必须先update
composer install 完全依赖 composer.lock,它只按 lock 文件里的 dist.shasum 去目录里找对应 ZIP 文件,不会重新扫描 ./packages 目录。所以你放了一个新 ZIP,不更新 lock 文件,它就永远看不到。
新增或替换 ZIP 后,必须执行:
-
composer update acme/utils(只更新指定包) - 或
composer update(全量刷新可用版本列表) - 之后再
composer install才能生效
CI 流程中容易漏掉这一步,导致部署时拉不到最新 ZIP —— 这是离线环境最常被忽略的环节。










