离线环境执行composer install必须显式启用--no-network,否则仍会触发DNS/TLS请求而失败;需提前在联网机运行--prefer-dist下载ZIP包、验证缓存完整性,并在离线机配置正确path仓库路径及PHP环境一致性。

离线环境里 composer install 报错或卡住,根本不是“网络没开”这么简单——它默认仍会尝试访问 packagist.org,哪怕你断网也会在解析阶段失败。必须提前在联网机上把 ZIP 包、composer.lock 和本地仓库结构一并准备好,再复制到离线机执行带 --no-network 的安装。
离线前必须在联网机跑通 composer install --prefer-dist
这是整个离线流程的起点,不能跳过:
- 确保项目已有
composer.lock(由composer update或首次composer install生成) - 运行
composer install --prefer-dist --no-scripts --no-plugins—— 这会强制下载所有 dist ZIP 包到本地缓存目录(通常是~/.composer/cache/files/) - 别用
--no-install:它只解析不下载,离线机上就真没包可装了 - 验证 ZIP 是否齐全:进
~/.composer/cache/files/看子目录数量是否与composer.lock中的包数一致
--no-network 不是可选项,是强制开关
离线机上不加这个参数,Composer 仍会发 DNS 请求、尝试 TLS 握手,最终超时失败:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确命令:
composer install --no-network --prefer-dist --no-scripts --no-plugins - 如果报
Could not fetch ...或卡在Resolving dependencies,说明没加--no-network或本地仓库路径配置错了 - 别信
COMPOSER_NO_INTERACTION=1:它只关交互,不关网络 - 若提示
repository not found,检查composer.json里的repositories是否指向了正确的本地路径(如file:///opt/composer-offline-cache)
本地仓库目录结构必须符合 Composer 认证逻辑
直接把 ~/.composer/cache/files/ 整个拷过去不行,它不是即插即用的仓库:
- 推荐做法:用
composer archive或composer-offline工具生成标准仓库目录,结构为vendor/name/package/version-hash.zip - 手动配
type: "package"太脆弱——每个包都要写dist.url,composer.lock里一个版本号改了就得全重写 - 更稳的方式:在离线机项目根目录下运行
composer config repositories.0 type path+composer config repositories.0 url /path/to/local/packages,然后把 ZIP 放进/path/to/local/packages/下对应子目录 - 注意路径权限:
ls -ld /path/to/local/packages必须显示当前用户为属主,否则file_put_contents权限拒绝
离线安装后 autoload 失效?先查 vendor/autoload.php 是否生成
即使 composer install 显示 “Installing dependencies”,也不代表自动加载就绪:
- 执行
php -r "require 'vendor/autoload.php';"验证文件是否存在且可读 - 如果报
Class not found,但vendor/目录里确实有对应包,大概率是autoload没刷新——补一句composer dump-autoload --optimize - CI 或 Docker 构建中常见陷阱:
post-install-cmd脚本在vendor/autoload.php写入完成前就启动,应改用post-autoload-dump阶段 - OPcache 可能缓存旧的
autoload_static.php,重启 PHP-FPM 或运行php -r "opcache_reset();"
真正容易被忽略的是:离线机上的 PHP 版本和扩展必须和联网机制作时一致。比如联网机是 PHP 8.2 + mbstring,离线机是 PHP 8.1 或没开 xml 扩展,composer install 会在解析阶段直接退出,连 ZIP 包都碰不到。

















