能离线安装,但必须提前在联网机完成缓存拉取+元数据固化,否则composer install一运行就报“could not fetch”;根本原因在于composer默认不信任本地文件,即使设composer_disable_network=1,仍需完整composer.lock(含dist.shasum/dist.url)、全量缓存目录(files/repo/archived)、--prefer-dist及--no-scripts--no-plugins配合,缺一则失败。

能离线安装,但必须提前在联网机完成缓存拉取 + 元数据固化,否则 composer install 一运行就报 Could not fetch —— 它不是卡在下载,而是根本没走本地逻辑。
为什么 COMPOSER_DISABLE_NETWORK=1 还失败?
这个环境变量只禁用网络请求,不解决元数据缺失问题。Composer 在解析 composer.lock 时,仍会尝试读取 repo.packagist.org/packages.json 来校验包是否存在,哪怕最终不用下载。
- 必须配合完整、未改动的
composer.lock(含所有包的dist.shasum和dist.url) - 缓存目录里不能只有
files/,repo/和archived/也得一起迁移,否则它找不到包对应元数据 - Windows 上用
set COMPOSER_DISABLE_NETWORK=1,Linux/macOS 用COMPOSER_DISABLE_NETWORK=1 composer install,PowerShell 用$env:COMPOSER_DISABLE_NETWORK="1"
预下载缓存必须带全三个子目录
只拷 ~/.composer/cache/files/ 是最常见错误。真正生效的缓存结构是:
-
files/:存vendor/name-version-hash.zip等压缩包 -
repo/:存packagist.org/packages.json及各包元数据(决定哪个 ZIP 对应哪个版本) -
archived/:存composer archive输出,非必需但部分流程会查
迁移前先确认路径:composer config --global cache-dir;离线机上先执行:composer config --global cache-dir /your/local/cache/path,再运行安装命令。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
--prefer-dist 和 --no-scripts --no-plugins 缺一不可
--prefer-dist 强制走 ZIP/TAR 解压路径,这是缓存生效的唯一通道;--no-scripts 和 --no-plugins 防止某些包的 post-install-cmd 或插件(如 hirak/prestissimo)内部发起 HTTP 请求——这些调用 COMPOSER_DISABLE_NETWORK=1 拦不住。
- 如果
composer.lock里有"type": "git"或dev-main,--prefer-dist会直接失败,得先在联网机用composer update --lock转为稳定版本 - 安装后必须补一记:
composer dump-autoload -o,否则运行时报Class not found - 别用
composer archive当离线方案——它只打包当前项目源码,不生成可被install识别的依赖包
artifact 仓库是最轻量可控的离线方案
适合依赖版本明确、能提前打包的场景。你提供 ZIP,Composer 只解压、装 autoload,不查任何远程地址。
- ZIP 文件名必须严格为
vendor/name-version.zip(如monolog/monolog-2.13.0.zip),大小写和分隔符都不能错 - 在
composer.json中添加:"repositories": [{"type":"artifact", "url":"./packages/archives"}] - 不支持
dev-main或分支,composer.lock里若锁的是dev-版本,得手动改成对应 tag - 不推荐手建 ZIP 目录——容易漏包、命名错位;建议用
composer-satis或php bin/satis build自动生成
复杂点在于:每换一个 PHP 版本或 Composer 主版本,缓存格式可能不兼容;跨系统拷 vendor/ 看似简单,但符号链接、绝对路径、扩展差异会让它在目标机静默失败。










