离线环境无法使用 composer create-project,因其强制联网获取元数据;正确做法是在联网机执行 git clone + composer install 生成完整 vendor 后,连同 composer.lock 一起复制到离线机,并运行 composer_disable_network=1 composer install --no-plugins --no-scripts --no-autoloader 及 composer dump-autoload -o。

离线环境不能用 composer create-project,它强制联网解析元数据,加 COMPOSER_DISABLE_NETWORK=1 也拦不住——这不是配置问题,是命令本身设计如此。
为什么 create-project 在离线机上必失败
这个命令本质是两步合并:先远程克隆模板仓库(比如 topthink/think),再执行 composer install。哪怕你把 composer.phar、composer.lock、甚至整个 vendor/ 都拷过去,它第一件事仍是访问 https://repo.packagist.org/packages.json 去查模板项目的元信息。
典型报错:Could not fetch https://repo.packagist.org/packages.json 或 Package topthink/framework not found。
--offline 参数不存在;COMPOSER_DISABLE_NETWORK=1 对它完全无效;它不读本地缓存、不认已有的 vendor/、也不支持跳过元数据校验。
离线初始化项目的唯一可行路径:分步构建 + 复制 + 补 autoload
绕过 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
复制 vendor/ 前必须确认的三件事
直接复制 vendor/ 是最稳方案,但前提是:
- 源机与目标机 PHP 版本(包括小版本,如 8.2.12)一致,否则
vendor/里可能含语法错误文件(比如 PHP 8.2 的只读属性被 PHP 7.4 解析失败) - 关键扩展一致:至少
mbstring、openssl、json、curl必须存在且启用 - 打包前已在源机验证 autoload:
require 'vendor/autoload.php'; echo class_exists('Monolog\Logger') ? 'OK' : 'FAIL';
目标机解压后,优先跑 composer dump-autoload -o——它能修复 symlink 路径污染或 autoload.php 权限问题,比重装更轻量。
别踩这些坑
常见“以为能行,其实会挂”的操作:
- 在
composer.json里加"repositories": [{"type":"path","url":"./packages"}]→ 这只能用于已有本地代码包,不能替代初始化 - 只拷
composer.lock+ 手动改dist.url→ Composer 不认手动修改的 lock 文件,哈希校验直接失败 - 离线机执行
composer update→ 它会尝试联网重解析依赖树,必然失败 - 用
artifact仓库方式 → 它只支持顶层包,子依赖仍需联网下载,不解决根本问题
真正关键的不是“怎么让 Composer 离线运行”,而是“怎么让它根本不需要联网”——答案就是:让所有代码和 autoload 映射,在离线前就准备好、验证好、打包好。










