离线安装composer必须设composer_disable_network=1,否则即使vendor和lock完整,install仍会因校验远程元数据而失败;需配合--no-plugins --no-scripts --no-autoloader并补dump-autoload -o,且须全局禁用repo.packagist。

离线安装 Composer 不是“断网就能自动适配”,必须显式切断所有联网路径,否则 composer install 一定会卡在 Could not fetch https://repo.packagist.org/packages.json。
为什么不能只靠 --no-network 参数?
COMPOSER_DISABLE_NETWORK=1 是硬性前提,不设它,--no-network 或任何 --no-xxx 参数都无效。Composer 的元数据校验逻辑在参数解析前就已触发,环境变量才是开关级控制。
- Windows CMD 中必须用
set COMPOSER_DISABLE_NETWORK=1;PowerShell 中用$env:COMPOSER_DISABLE_NETWORK="1" - Dockerfile 中应写为
ENV COMPOSER_DISABLE_NETWORK=1,且必须放在所有RUN composer ...命令之前 - 如果已设该变量却仍报 SSL 错误(如
cURL error 60),说明配置被绕过——大概率是repo.packagist全局配置残留或项目级repositories覆盖了禁用逻辑
怎么彻底禁用 Packagist 远程源?
仅靠 "repositories": [{"type": "packagist", "url": false}] 不够,这种写法在 COMPOSER_DISABLE_NETWORK=1 下会直接退出,不是静默忽略。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须执行
composer config --global repo.packagist false,这是唯一能全局关闭 fallback 行为的命令 - 检查是否生效:运行
composer config --list | grep repo.packagist,输出应为repo.packagist=false - 同时确认项目级无残留:
composer config repo.packagist应无输出;若有,需手动删掉composer.json中对应字段
离线 install 的最小安全命令组合是什么?
这组参数不是可选优化,而是防止隐式联网的强制防护线。缺一不可,且顺序无关紧要。
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader-
--no-plugins:跳过 phpstan/extension-installer 等插件初始化,它们常在后台发请求 -
--no-scripts:屏蔽post-install-cmd,避免调用外部 API 或生成前端资源 -
--no-autoloader:先跳过 autoload 生成,等后续用dump-autoload -o显式重建,避免扫描失败导致类缺失 - 执行完立刻补上
composer dump-autoload -o,否则运行时大概率报Class not found
vendor 存在、lock 文件完整,为什么 install 还失败?
根本原因不是文件缺失,而是 Composer 默认仍会校验远程元数据:比如验证包是否存在、版本是否合法、dist 包哈希是否匹配。这些校验无法跳过,除非网络通路被物理切断。
- 检查
composer.lock是否含"source": {"type": "git"}或"dev-master"类型条目——这类锁条目天生不支持离线,install 必然失败 - 若用了
"type": "path"仓库,确保路径是容器/离线机内真实存在的绝对路径,且对应目录下有合法composer.json(name和version字段必须与 require 完全一致) - 最稳验证方式:启动容器后执行
ip link set eth0 down断网,再跑上述 install 命令;只要没报任何https://相关错误,才算真正离线可用










