离线时composer install仍报could not fetch packages.json,因其默认强制联网校验元数据,即使vendor和lock齐全;必须前置设置composer_disable_network=1(linux/macos用export,windows用set),否则所有参数无效,且需禁用全局packagist源并清理冲突的repositories配置。

离线时 composer install 为什么仍报 Could not fetch packages.json
因为默认行为会联网校验元数据,哪怕 vendor/ 和 composer.lock 都齐全。不设 COMPOSER_DISABLE_NETWORK=1,所有参数都无效——它不是“优化开关”,而是硬性断网指令。
常见错误现象包括:Could not fetch https://repo.packagist.org/packages.json、Package not found(实为子依赖缺失)、或卡在“Loading composer repositories”不动。
-
COMPOSER_DISABLE_NETWORK=1必须前置设置,Linux/macOS 用export COMPOSER_DISABLE_NETWORK=1,Windows 用set COMPOSER_DISABLE_NETWORK=1 - 全局配置残留会 fallback 校验:执行
composer config --global repo.packagist false彻底禁用 packagist 源 - 若
composer.json含"repositories": [{"type": "packagist", "url": false}],即使设了环境变量也会直接退出,必须删掉或注释
用全局缓存迁移的实操要点
缓存方案可行,但容易漏掉 transitive dependencies(传递依赖),比如主包依赖 psr/log,而后者又依赖 psr/container——只装主包,缓存里就不会有后两者。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在线机必须执行完整安装:
composer install --no-dev --prefer-dist,不能只composer require xxx或update - 必须打包整个
~/.composer/cache/files/目录(Windows 路径是C:\Users\用户名\AppData\Roaming\Composer\Cache\files),少一个 ZIP 就可能失败 - 离线机需显式重定向缓存路径:
composer config --global cache-files-dir /your/local/cache/path,否则 Composer 默认查原路径(为空) - 验证缓存完整性:运行
composer install --no-plugins --no-scripts --no-autoloader --dry-run(Composer 2.5+),看是否提示 “Nothing to install”
vendor 目录直拷是最稳的离线方案
它绕过所有解析、校验、下载环节,composer install 在离线时根本不会触发网络请求——前提是环境一致。
- PHP 版本必须含小版本一致(如 8.2.12 → 8.2.12),扩展如
mbstring、openssl、zlib、curl全部启用 - 源机打包前务必执行:
composer install --no-dev --optimize-autoloader,再用最小代码验证 autoload:require 'vendor/autoload.php'; echo class_exists('Monolog\Logger') ? 'OK' : 'FAIL'; - 目标机解压后优先运行:
composer dump-autoload -o,修复 symlink 权限或路径污染问题 - 若不确定 vendor 是否干净,可用
composer install --no-plugins --no-scripts --no-autoloader --dry-run预览行为
新增包只能靠 path 仓库,别碰 create-project
composer create-project 在离线机上必败,它第一步就强制访问 https://repo.packagist.org/packages.json 解析模板元信息,--offline 参数不存在,COMPOSER_DISABLE_NETWORK=1 对它也无效。
- 离线添加新包唯一可靠方式是
path仓库:目标包根目录要有合法composer.json(含"name"和"version"或分支标识) - 项目根目录
composer.json中添加:"repositories": [{"type":"path","url":"./packages/my-utils"}](注意 Windows 要写绝对路径,如C:/projects/my-pkg) - 然后执行:
composer require acme/utils:dev-main(版本必须匹配composer.json中声明) -
composer.lock必须保留且不可手动修改,否则子依赖哈希校验失败
真正难的不是操作步骤,而是环境一致性判断——PHP 小版本差一个 patch、少一个扩展、甚至 openssl 版本不兼容,都可能导致 vendor/ 里某文件语法报错或类加载失败。离线部署前,务必用目标机 PHP SAPI(CLI/FPM)跑一次最小验证。










