必须设COMPOSER_DISABLE_NETWORK=1才真正离线,否则composer install必连https://repo.packagist.org/packages.json;即使vendor和lock完整,也会因默认校验远程元数据报错,且所有--no-xxx参数在未设该变量时均无效。

必须设 COMPOSER_DISABLE_NETWORK=1 才算真正离线
不加这个环境变量,composer install 一定会去连 https://repo.packagist.org/packages.json,哪怕 vendor/ 已存在、composer.lock 也完整。报错不是因为缺文件,而是 Composer 默认校验远程元数据——这个行为无法跳过,只能靠硬性禁用网络触发点来绕开。
常见错误现象:Could not fetch https://repo.packagist.org/packages.json 或卡在 “Loading composer repositories” 阶段。
-
COMPOSER_DISABLE_NETWORK=1是前提,不是可选项;没它,后面所有--no-xxx参数都无效 - Windows 下用
set COMPOSER_DISABLE_NETWORK=1,Linux/macOS 用export COMPOSER_DISABLE_NETWORK=1 - 该变量只对当前 shell 会话生效,别忘了在执行命令前设置
- 如果项目
composer.json里写了"repositories": [{"type": "packagist", "url": false}],即使开了COMPOSER_DISABLE_NETWORK=1也会直接退出,不是静默忽略
composer install 离线执行的最小安全参数组合
仅设 COMPOSER_DISABLE_NETWORK=1 还不够:某些插件或脚本仍可能隐式联网(比如 phpstan/extension-installer),必须显式屏蔽高风险环节。
-
--no-plugins:跳过插件初始化,防止插件触发远程请求 -
--no-scripts:避免post-install-cmd类脚本调用外部 API 或生成配置 -
--no-autoloader:绕过 autoload 重建,某些自定义 autoloader 实现会查远程类
执行完这一步,vendor/ 目录结构已就位,但运行时大概率报 Class not found——因为 autoload 文件没生成。
所以必须立刻补一记:composer dump-autoload -o。这个命令不联网,纯本地操作,生成优化后的 vendor/autoload.php。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
全局和项目级 packagist 源必须彻底清空
只改 repos.packages 地址没用,Composer 仍会 fallback 到默认源做校验。只要某处还留着 packagist.org 的痕迹,composer install -v 就能看到真实请求地址。
- 全局禁用:
composer config --global repo.packagist false - 检查项目级配置:
composer config repo.packagist输出应为空,不能是composer https://packagist.org - 删掉项目
composer.json中"repositories"数组里任何指向https://packagist.org的条目 - 验证是否生效:
composer config -g repos应只显示你加的本地源(如packages)
漏掉任意一项,都可能导致安装中途尝试 DNS 查询或连接拒绝(Connection refused),尤其在 Windows 上容易被误判为防火墙问题。
离线新增依赖只能走 path 或 artifact 类型仓库
composer require 在离线环境下必然失败,因为它默认要联网解析包名和版本。唯一可行路径是把本地目录或压缩包当仓库用。
-
path类型:适合已有源码的包。包根目录必须有合法composer.json,含完整"name"和"version"(或分支标识如"dev-main")。项目中配置:"repositories": [{"type":"path","url":"./packages/my-utils"}],然后composer require my-utils/my-utils:@dev -
artifact类型:适合部署场景。所有.tar.gz包必须提前在联网机生成,命名严格为vendor-name/package-name-version.tar.gz(如monolog/monolog-2.13.0.tar.gz),且包内composer.json的name和version必须与文件名完全一致。离线机执行:composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}' - 两种方式都要求:全局和项目级
repo.packagist已禁用,否则仍会 fallback
最易被忽略的一点:Windows 下 path 仓库的 url 必须带盘符(如 C:/projects/my-pkg),相对路径写法(./packages)在某些 PHP 版本下会解析失败。

















