必须设COMPOSER_DISABLE_NETWORK=1,否则composer install必请求https://repo.packagist.org/packages.json而失败;需配合--no-plugins、--no-scripts、--no-autoloader及后续dump-autoload -o,且须清除全局镜像配置并禁用packagist源。

必须先设 COMPOSER_DISABLE_NETWORK=1,否则所有操作都无效
这不是可选项,是硬性开关。不设它,composer install 一定会去请求 https://repo.packagist.org/packages.json,报错可能是 Curl error 60、Could not resolve host 或卡在 Loading composer repositories。你看到的 --no-network 参数根本不存在,Composer 官方从未实现,写了也白写。
设置方式因系统而异:
- Linux/macOS:
COMPOSER_DISABLE_NETWORK=1 composer install ...(前置环境变量) - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1 && composer install ... - PowerShell:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install ...
composer install 离线执行必须带哪几个参数
只设环境变量还不够。默认行为仍会重建 autoload、执行脚本、加载插件——这些环节可能间接触发网络调用(比如 phpstan/extension-installer 初始化时查版本)。
-
--no-plugins:防止插件初始化时联网(如hirak/prestissimo或symfony/flex) -
--no-scripts:屏蔽post-install-cmd,避免脚本调用curl、npm install或生成前端资源 -
--no-autoloader:绕过 autoload 重建,某些自定义 autoloader 实现会尝试远程类查找
执行完这一步后,**必须立刻运行 composer dump-autoload -o**,否则运行时大概率报 Class not found。
离线前最容易被忽略的三件事
很多团队在联网机上跑了 install,把 vendor/ 拷过去就以为能用,结果离线机上直接失败。问题往往出在这三点:
- 没清掉全局镜像配置:
composer config --global repo.packagist false必须执行,否则 Composer 会在离线时 fallback 尝试连接https://mirrors.aliyun.com/composer/ -
composer.lock里含"source": {"type": "git", ...}条目:这种锁文件天生不支持离线,install必然失败 - 用了
create-project命令初始化:它强制联网解析模板元数据,COMPOSER_DISABLE_NETWORK=1对它完全无效;离线必须改用分步法(composer init+ 复制vendor+dump-autoload)
想离线加新包?别用 require,改用 path 仓库
composer require 默认必须联网查包名、版本、依赖树,它不读本地缓存,也不检查 ~/.composer/cache/files/,断网必报错。
唯一可行路径是把本地目录当仓库用:
- 目标包根目录下要有合法
composer.json,含完整name和version(或dev-main) - 项目
composer.json中声明:{"type":"path","url":"./packages/my-utils"} - 执行
composer require vendor/my-utils:@dev(注意必须带@dev) - 装完立刻运行
composer dump-autoload -o,否则autoload.php不包含该包
还要同步禁用全局 Packagist:composer config --global repo.packagist false,否则 path 也会 fallback 到远程源。


















