离线环境无法直接运行composer create-project或install,必须分步构建:联网机完成git clone、install生成完整vendor和lock,迁移后离线机执行composer_disable_network=1 install --no-plugins --no-scripts --no-autoloader,再dump-autoload -o。

离线环境里用 Composer 不是“配个镜像就能跑”,而是必须绕开它默认的联网行为。所有试图在离线机上直接运行 composer create-project 或 composer install 的操作,只要没提前冻结完整依赖,基本都会卡在 Could not fetch https://repo.packagist.org/packages.json 上——这不是网络配置问题,是命令本身设计决定的。
为什么 create-project 在离线机上必失败
composer create-project 本质是两步强耦合操作:先远程解析模板项目元信息(比如 topthink/think 的最新稳定版 tag),再执行安装。它不读本地 composer.lock,不认已有的 vendor/,也不接受 --offline 参数(该参数根本不存在)。
-
COMPOSER_DISABLE_NETWORK=1对它完全无效 - 即使你把
composer.phar、composer.json、composer.lock全拷过去,它第一件事仍是访问https://repo.packagist.org - 报错典型形式:
Package topthink/framework not found或Could not resolve packages
离线初始化项目的唯一可行路径
放弃 create-project,改用分步构建 + 完整迁移。关键在于:所有远程动作必须在联网机完成,离线机只做本地还原。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 联网机上用
git clone或解压官方 ZIP 获取骨架(如topthink/think),删掉原有composer.lock(防止锁住远程地址) - 进目录后执行:
composer install --no-dev --prefer-dist --no-scripts --no-plugins --optimize-autoloader,确保vendor/完整且无运行时副作用 - 打包整个项目目录(含
vendor/、新生成的composer.lock、composer.json),拷入离线机 - 离线机上先清缓存:
composer config --global cache-dir /dev/null,再执行:COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - 最后补一记:
composer dump-autoload -o,否则类加载会失败(Class not found)
仓库配置陷阱:path 类型仓库在离线时不生效
很多人以为加个 "repositories": [{"type":"path","url":"./packages"}] 就能本地装包,实际不行。Composer 的 path 类型仓库仅在 composer update 或首次 install 时被扫描,但前提是它得先联网校验顶层依赖的合法性——而离线机连 packages.json 都拉不到,根本走不到扫描这步。
- 这个配置对
create-project完全无影响 - 它也不能让
composer install跳过远程源校验 - 真正离线可用的只有已下载进
vendor/的包,或通过dist包缓存复用(但缓存本身需联网生成)
vendor 目录迁移前必须检查的三个点
直接拷 vendor/ 看似省事,但 PHP 版本、扩展依赖、骨架结构不匹配会导致运行时崩溃。
- 源机与目标机 PHP 版本必须一致(例如源机是 PHP 8.2,目标机是 7.4,vendor 里可能含
match表达式,直接 fatal error) - TP5 和 TP6/8 的骨架结构不同:混用会导致
public/缺失、think命令脚本找不到、app/目录层级错乱 -
composer.lock中记录的 dist URL(如https://api.github.com/...)虽不影响离线运行,但若后续要update,必须配合"packagist.org": false和私有源配置,否则仍 fallback 到官方源
离线不是“断网就行”,是把依赖链路从“运行时动态解析”变成“构建时静态快照”。最容易被忽略的是 autoload 补全和 PHP 版本对齐——前者漏了就 Class not found,后者错了就 Parse Error,都没法靠重试解决。










