composer怎么设置不联网安装依赖?

1次阅读

离线安装 composer 依赖需同时满足三条件:禁用所有网络触发点、确保 vendor 完整且 lock 未变、消除交互阻塞;推荐命令为 composer install –no-plugins –no-scripts –no-autoloader。

composer怎么设置不联网安装依赖?

composer install 时跳过网络请求的几种方式

Composer 默认每次 install 都会访问 packagist.org 或配置的镜像源,即使 vendorcomposer.lock 都存在。想完全离线安装,核心是让 Composer 不发起任何 http 请求——不是“不更新”,而是“根本不去连”。

用 –no-plugins –no-scripts –no-autoloader + vendor 已存在

这是最常用、也最可靠的离线方案,前提是本地已有完整 vendor 目录且 composer.lock 未变。它不依赖缓存或镜像配置,纯靠文件系统。

  • --no-plugins:跳过插件初始化(很多插件会尝试联网校验)
  • --no-scripts:防止 post-install-cmd 等脚本触发网络操作(比如调用 API 或下载额外资源)
  • --no-autoloader:避免 autoloader 生成阶段意外触发远程类加载(极少见,但某些自定义 autoloader 逻辑可能隐含请求)
  • 必须确保 vendor/ 目录完整、所有包路径与 composer.lock 中记录的版本严格一致

执行命令:composer install --no-plugins --no-scripts --no-autoloader

设置 COMPOSER_CACHE_DIR + require –no-interaction

如果你需要在无网环境首次安装(比如 CI 构建机),得提前把依赖缓存“搬过去”。Composer 缓存本身不包含完整包,但配合 composer install --prefer-dist 和预下载的 dist 包,可实现离线拉取。

  • 先在有网机器运行:composer install --prefer-dist --no-scripts,再打包整个 COMPOSER_CACHE_DIR(默认 ~/.composer/cache
  • 把缓存目录复制到目标机器,并通过环境变量指定:COMPOSER_CACHE_DIR=/path/to/cachedir composer install --no-interaction --prefer-dist
  • --no-interaction 关键:避免因缺少网络而卡在“是否启用 https://packagist.org?”这类交互提示
  • 注意:dist 包缓存只对 zip/tar 形式有效;如果项目里用了 "type": "package"git 仓库依赖,仍可能失败

禁用 packagist 的三种写法及其区别

很多人以为加 "packagist.org": false 就万事大吉,其实不同位置效果完全不同,容易白配。

  • composer.jsonrepositories 里写:{"packagist.org": false} → 仅禁用该配置生效时的当前项目,但 composer install 仍可能读全局配置或 fallback 到默认源
  • composer.json 里加:"repositories": [{"type": "packagist", "url": false}] → 更明确,但部分旧版 Composer 会忽略 url: false
  • 真正可靠的是命令行强制:composer install --repository-url=none → 直接绕过所有仓库配置,只认本地 vendorlock 文件,但要求所有依赖必须已存在且版本匹配

错误示范:"repositories": [] 并不能禁用 packagist,默认行为仍会启用它。

最关键的细节是:离线安装不是“关掉网络就行”,而是要同时满足「无网络请求触发点」+「所有依赖已就位」+「无交互阻塞」。哪怕一个 post-install 脚本里写了 file_get_contents('https://...'),或者某个包的 autoload 里动态 require 远程 URL,都会让所谓“离线”当场失效。

text=ZqhQzanResources