只拷 composer.lock 一定失败,因为其不含代码,仅记录元数据,离线时 Composer 仍会请求 dist.url 或访问 packagist.org 校验;必须设 COMPOSER_DISABLE_NETWORK=1,并执行 composer install --no-plugins --no-scripts --no-autoloader 和 composer dump-autoload -o 才能成功。

为什么只拷 composer.lock 一定失败
因为 composer.lock 不含任何代码,只记录包名、版本、dist.url 和 dist.shasum。离线时 Composer 仍会尝试请求 dist.url(比如 "https://api.github.com/.../zipball/")或访问 https://repo.packagist.org/packages.json 校验元数据。哪怕 vendor/ 目录就在旁边,它也不会读,而是直接报 Package not found 或 Could not fetch。
COMPOSER_DISABLE_NETWORK=1 是硬性前提,不是可选开关
没设这个环境变量,所有 --no-plugins、--no-scripts 都拦不住初始网络请求。Composer 在 install 第一阶段就会去拉 packages.json,不成功就退出。
- Linux/macOS:执行前加
export COMPOSER_DISABLE_NETWORK=1 - Windows:用
set COMPOSER_DISABLE_NETWORK=1(cmd)或$env:COMPOSER_DISABLE_NETWORK="1"(PowerShell) - 验证是否生效:往
/etc/hosts(Win 是%SystemRoot%\System32\drivers\etc\hosts)加127.0.0.1 packagist.org,再跑composer install -v;看到Connection refused才算真正断网
还原时必须分三步走,缺一不可
光解压 vendor/ 目录不能直接运行项目——autoload 可能失效,类找不到,插件或脚本残留也可能触发隐式联网。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先执行:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader(跳过所有可能触发网络或执行外部逻辑的环节) - 再执行:
composer dump-autoload -o(强制重生成优化后的自动加载映射,路径基于当前目录) - 最后验证:
php -r "require 'vendor/autoload.php'; echo 'OK';",能输出 OK 才算真正可用
打包前必须清理两类危险文件
vendor/ 目录里藏着两个容易导致离线失败的“雷”:
-
vendor/bin/:里面是软链接(Linux/macOS)或批处理脚本(Windows),内网解压后基本失效,且可能被某些插件误读触发异常 -
vendor/composer/installed.json:含开发机的绝对路径(如/home/user/project/vendor/...),autoload 阶段会按此路径查找,导致Class not found
打包命令建议用:zip -r app-offline.zip . -x "vendor/bin/*" "vendor/composer/installed.json" "node_modules/*" ".git/*",别用图形化压缩工具——它们常改文件权限或塞入元数据,破坏 PHP 加载逻辑。

















