离线环境无法执行 composer update,因其必须联网解析依赖并下载包;唯一可行的是在联网机生成新 lock 和 vendor 后搬运,或通过 COMPOSER_DISABLE_NETWORK=1 配合 --repository-url=file:// 本地仓库方式运行 composer install。

离线环境根本不能执行 composer update
这个命令默认会联网访问 packagist.org 或配置的仓库,解析 composer.json、重新计算依赖树、下载新版本元数据和 dist 包。专网无公网时,它会卡在 Could not fetch packages 或直接报 cURL error 7,连本地 composer.lock 都不会读——它压根不走离线路径。
真正能用的只有 composer install,但它只认 composer.lock,不会“更新”任何东西。所谓“离线更新”,本质是在有网机器上生成新 lock + 新 vendor,再搬运过去。
- 想升级某个包?必须先在联网机改
composer.json,跑composer update vendor/package,生成新composer.lock和完整vendor/ - 想升 PHP 版本?先改
config.platform.php,再删旧composer.lock,再composer update—— 这步必须联网 - CI 构建流程里,
composer install是部署动作,composer update是构建动作,两者不可混用
--repository-url=file:// 是唯一可控的离线安装方式
单纯复制 vendor/ 目录到专网机器,composer install 仍可能触发网络请求:比如某些包的 post-install-cmd 脚本调用 curl,或插件(如 hirak/prestissimo)尝试预热缓存。更稳的方式是让 Composer 把本地文件夹当仓库用。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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,确保所有包走 zip 下载(不是 git clone) - 拷贝
~/.composer/cache/files/下全部.zip文件(按vendor/name/commit-hash.zip结构)到专网机某路径,例如/mnt/composer-dist/ - 专网机运行:
COMPOSER_DISABLE_NETWORK=1 composer install --no-dev --prefer-dist --repository-url=file:///mnt/composer-dist/ - 该命令强制跳过所有网络请求,并按
composer.lock中记录的 exact commit 和 sha256 校验每个 zip 是否匹配
专网机器上执行 composer install 前必须检查三件事
报错不是因为没网,而是环境不一致。常见失败点和对应检查项:
-
PHP version:确认专网机 PHP 版本 ≥composer.lock中所有包声明的require.php最低版本(比如锁文件里某包 require php >=8.2,而机器是 8.1,就会失败) -
ext-zip:解压 dist zip 必需,缺失会导致Failed to extract错误;ext-json、ext-openssl同样不可少 -
权限与 SELinux:CentOS 专网环境常开 SELinux,vendor/解压后文件可能被标记为unconfined_u:object_r:user_home_t:s0,导致 autoload 失败;用restorecon -Rv vendor/重置上下文
私有包(GitLab / SVN)在离线环境怎么处理
如果 composer.json 里用了 "type": "vcs" 或私有仓库地址,--repository-url=file:// 不会生效——Composer 仍会尝试 clone。正确做法是提前把私有包源码 clone 到专网机本地,再改用 path 类型仓库。
- 在专网机创建目录,如
/opt/private-packages/my-lib,放入已 clone 的代码(含完整composer.json) - 项目根目录的
composer.json中添加:"repositories": [{"type": "path", "url": "/opt/private-packages/my-lib"}] - 确保该路径下
composer.json的name字段与项目中require的名字完全一致(包括大小写) - 运行
COMPOSER_DISABLE_NETWORK=1 composer install即可从本地路径加载,不再触发 git 操作
专网环境下,“更新依赖”的操作边界很窄:所有变更必须在联网侧完成,专网侧只做验证性还原。最容易被忽略的是 PHP 平台约束和扩展一致性——它们不报网络错误,但会让 composer install 静默跳过某些包,最终运行时报 Class not found。










