离线运行composer install必须显式设置composer_disable_network=1,否则即使vendor和lock文件完整,仍会因默认校验远程元数据而报could not fetch https://repo.packagist.org/packages.json;该环境变量是硬性前提,不设则所有--no-xxx参数无效,且需配合--no-plugins --no-scripts --no-autoloader及后续dump-autoload -o执行。

离线环境里跑 composer install 不是“断网后试试看”,而是必须提前切断所有联网路径、显式禁用网络行为,否则哪怕 vendor/ 和 composer.lock 都完整,也会报 Could not fetch https://repo.packagist.org/packages.json。
COMPOSER_DISABLE_NETWORK=1 是硬开关,不设它就等于没离线
Composer 默认会在 install 阶段主动校验远程元数据(比如包是否存在、版本是否合法),这个行为无法跳过——哪怕你拔了网线,它仍会尝试发起请求并失败。唯一可靠方式是提前设置环境变量强制关闭网络通路:
-
COMPOSER_DISABLE_NETWORK=1必须在执行前导出,且不能只靠临时 shell 变量(如COMPOSER_DISABLE_NETWORK=1 composer install在某些 shell 下不生效),推荐写进脚本或export COMPOSER_DISABLE_NETWORK=1 - 不设这个变量,后面所有
--no-xxx参数都无效,composer install一定会触发远程请求 - 设了之后,如果
composer.json里还写了"repositories": [{"type": "packagist", "url": false}],会直接退出而非静默忽略
离线 install 的最小安全命令组合
仅当 vendor/ 已存在、composer.lock 未改动、PHP 版本和扩展(mbstring、openssl、zlib)完全一致时,才能跳过下载阶段。此时要绕过所有可能触发联网的环节:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer install --no-plugins --no-scripts --no-autoloader:跳过插件初始化(如phpstan/extension-installer)、屏蔽 post-install-cmd 脚本、绕过 autoload 重建(某些自定义实现会查远程类) - 执行完必须立刻补一记
composer dump-autoload -o,否则运行时大概率报Class not found - 如果项目用了全局配置,务必先运行
composer config --global repo.packagist false彻底禁用 fallback 校验,否则它仍会尝试连packagist.org
离线添加新包只能靠 path 仓库,require 不可用
composer require 默认必须联网查包名和版本,离线不可用。唯一可靠方式是把本地目录当仓库用:
- 目标包根目录下必须有合法
composer.json,含完整"name"(如"acme/utils")和"version"或分支标识(如"dev-main") - 项目根目录
composer.json中添加:"repositories": [{"type":"path","url":"./packages/my-utils"}](注意:url必须是相对路径;Windows 要带盘符,如C:/projects/my-pkg) - 如果
composer.lock中某个包标记为"source"类型(如"dev-master"或 Git URL),离线时无法校验,install必然失败
最容易被忽略的是:离线模式不是“网络不通就自动启用”,而是靠 COMPOSER_DISABLE_NETWORK=1 主动触发;一旦漏掉,所有后续操作都在徒劳地等待一个永远连不上的地址。










