离线环境让 composer 正常工作的关键是提前将镜像源配置写入用户级 config.json,并完整缓存 packages.json 元数据及所有依赖 zip 包;必须确保 repositories 键名为 packagist.org、url 以 / 结尾,且项目 composer.json 中无 repositories 字段干扰。

composer 没有“全局变量”机制,离线环境也不能靠环境变量(如 COMPOSER_HOME)启用镜像源——它只改配置文件位置,不改行为。真正在离线环境让 composer 正常工作,核心是提前把镜像源配置写死进用户级 config.json,并确保所有依赖包的元数据和 zip 包都已本地化。
离线前必须完成:生成并导出完整镜像元数据
离线 ≠ 断网后随便配个 URL 就行。Composer 在安装时会先请求 packages.json(索引),再按需下载具体版本的 zip。没这个索引,连“有哪些包可装”都不知道。
所以离线准备阶段必须做两件事:
- 用在线机器执行
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾/) - 手动下载并缓存全量元数据:
composer global require --no-plugins --no-scripts packagist/mirror或更直接地:curl -s https://mirrors.aliyun.com/composer/packages.json > ~/.composer/cache/repo/https---mirrors-aliyun-com-composer/packages.json - 把整个
~/.composer/cache/目录打包带走,离线机解压到对应位置(路径由COMPOSER_HOME决定,但别指望它自动生效)
离线机上唯一有效的“全局配置”写法
离线机不能联网,composer config -g 命令本身仍可运行,但它只是写 JSON 文件。关键在于写对路径和内容。
手动编辑或脚本写入 $COMPOSER_HOME/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows),确保包含:
{
"repositories": {
"packagist.org": {
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
}
}
注意三点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是
packagist.org(不是repo.packagist),这是离线写 config.json 时的原始字段名;composer config -g repo.packagist是命令语法糖,底层仍转为此结构 -
url必须以/结尾,否则 Composer 构造请求路径时会拼错(如变成/composerpackages.json) - 不要加
"packagist": false或任何禁用默认源的字段——离线环境没有 fallback,禁用即彻底失败
项目级 repositories 会直接让离线配置失效
只要项目根目录 composer.json 里有 "repositories" 字段(哪怕空对象 {}),Composer 就会忽略全局 packagist.org 配置,转而尝试从空源或错误源解析依赖。
离线环境下这等于直接报错 Could not find package xxx。解决方法只有两个:
- 临时删掉项目
composer.json中的repositories字段(或整段注释掉) - 或者显式覆盖为本地路径源:
{"type": "path", "url": "/path/to/local/packages"},但需提前准备好符合 Composer repo 格式的本地包目录 - 执行
composer clear-cache强制丢弃可能残留的在线缓存(尤其repo/https---packagist-org/下的旧文件)
zip 包也得离线可用,光有 packages.json 不够
即使元数据齐全,composer install 还会尝试下载 dist zip。离线时若没提前缓存,会卡在 Loading from cache 后直接失败。
必须同步以下两类文件:
-
~/.composer/cache/files/下的vendor-name/package-name/version-hash.zip(由composer install --prefer-dist自动存入) - 或提前用
composer archive导出已安装包,再用composer install --no-install+ 手动解压到vendor/(不推荐,易错) - 验证方式:进项目后运行
composer install -vvv | grep "Downloading ",确认输出中没有https://github.com或packagist.org,全是本地路径或cache提示
离线配置最脆弱的一环,从来不是 config.json 写没写对,而是元数据和 zip 包是否真正“全量就位”——少一个 packages.json 的哈希值,整个依赖树就停在第一步。










