composer config -g repo.packagist在内网无效,因其仅替换元数据入口(packages.json),而dist.url仍指向github等外网地址,离线时无法解析连接;真正离线需三条件:设composer_disable_network=1、全局禁用repo.packagist false、composer.lock中dist.type必须为path或预下载artifact,且需配置本地artifact源并确保权限与路径合法。

无外网环境不能靠“改镜像地址”就生效,必须让 Composer 完全不尝试联网——repo.packagist 配置只换元数据入口,dist.url 仍指向 GitHub,离线时必然失败。
为什么 composer config -g repo.packagist 在内网无效
这条命令只替换 packages.json 的获取地址,但所有 ZIP 包下载路径(dist.url)仍保留在 lock 文件或包元数据里,例如:https://github.com/monolog/monolog/releases/download/2.10.0/monolog-2.10.0.zip。内网根本无法解析或连接该地址,composer install 会直接报 Could not fetch 或 Connection refused。
真正离线可用的配置组合
必须同时满足三个硬性条件,缺一不可:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
COMPOSER_DISABLE_NETWORK=1环境变量必须前置设置,否则任何--no-xxx参数都无效 - 全局禁用 packagist fallback:
composer config --global repo.packagist false(注意不是repos.packagist或packagist.org) -
composer.lock中所有包的dist.type不能是zip或git,必须是path或已预下载的artifact类型;若含"source": {"type": "git", ...},离线安装必失败
本地 artifact 源的正确写法
把已下载好的 ZIP 包统一放至 ./artifacts/ 目录,再在项目 composer.json 中声明:
{
"repositories": [
{
"type": "artifact",
"url": "./artifacts/"
}
]
}
注意点:
-
url必须是相对或绝对路径,结尾不加/packages.json,Composer 会自动扫描该目录下所有 ZIP/TAR 文件 - 每个 ZIP 包内部必须包含合法的
composer.json(含name和version),否则匹配失败 - 执行
COMPOSER_DISABLE_NETWORK=1 composer install前,确保vendor/为空,否则 Composer 可能跳过 artifact 解析
最常被忽略的权限与路径陷阱
即使配置全对,以下两点仍会导致静默失败:
- Linux/macOS 下,
./artifacts/目录需有读+执行权限(chmod +rx ./artifacts),否则 Composer 扫描时跳过整个目录,不报错也不提示 - Windows 路径中若含空格或中文,必须用双引号包裹
url值,且建议改用正斜杠:"url": "./my artifacts/" -
artifact模式不支持版本别名(如dev-main),composer require时必须写死 ZIP 文件名中体现的版本号,例如monolog/monolog:2.10.0










