“中文镜像”不能离线,因其本质是联网代理;真正离线需用artifact仓库,仅对指定包生效,且须严格命名、禁用packagist.org、手动同步sha256校验值。

为什么“中文镜像”本身不能离线
Composer 没有“中文镜像机制”这个内置概念——所谓“阿里云镜像”“腾讯云镜像”,只是把 repo.packagist.org 的元数据和包文件代理到国内 HTTP 地址,本质仍是联网行为。一旦断网,composer install 仍会卡在 Loading composer repositories,报 Could not fetch https://mirrors.aliyun.com/composer/packages.json。镜像只是加速,不是离线开关。
用 artifact 仓库接管部分包(真正离线)
想让某些包(比如公司内部 SDK、定制组件)彻底离线,又不干扰其他包走线上源,必须用 artifact 类型仓库,且只对特定包生效:
-
artifact目录里只放你要离线的包 ZIP,命名必须严格为vendor/name-version.zip(如acme/sdk-1.2.3.zip),压缩包内不能带顶层目录 - 在项目
composer.json的repositories中靠前位置加该artifact源,并设"packagist.org": false禁用默认源(否则它优先查线上) - 确保
require中的版本约束能命中你提供的 ZIP 文件名(例如写"acme/sdk": "1.2.3",不能写"^1.2"——artifact不解析语义化版本) - 运行
composer install --no-cache避免旧缓存干扰;用composer show acme/sdk -s确认来源是artifact而非packagist.org
混合源配置容易踩的坑
想保留大部分包走镜像源、仅个别包离线?别直接混用 composer 类型镜像 + artifact —— Composer 会按顺序查源,但 artifact 只提供 ZIP,不提供完整元数据(如依赖树),导致间接依赖缺失。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确做法:用
composer config -g repos.packagist '{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}'全局设镜像,再在项目级composer.json中单独加artifact源,并显式声明"packagist": false在repositories顶层 - 如果某包在
artifact中存在,但在镜像源中版本更高,Composer 仍可能选镜像源版本——必须删掉镜像源里的同名包,或改用path仓库替代 -
composer update在混合源下极易出错:它会尝试从镜像源拉取所有包的最新元数据,而你的artifact包根本不在其中,结果就是“找不到包”
离线包更新必须手动替换 ZIP
artifact 是静态文件集合,没有“更新”命令。想升级一个离线包:
- 在联网机上用
composer archive重新打包新版本 ZIP,文件名必须与composer.lock中记录的完全一致(包括大小写、分隔符) - 替换
artifact目录下的旧 ZIP,同时手动编辑composer.lock,把对应包的dist.shasum改成新 ZIP 的 SHA256 值(可用sha256sum xxx.zip计算) - 千万别只改
composer.json版本号就跑composer update——它会因无法访问远程源而失败
最易被忽略的是 dist.shasum 同步:值不匹配,Composer 会拒绝安装,报错信息却只显示 “package not found”,实际是校验失败。










