webui 构建时经常卡在npm install

// 此模板仅供参考,如果不适用可以修改

问题描述

webui 构建时经常卡在npm install
使用的 bingo build --stage stable -o /:chipv2_enable=True

[在这里详细描述您遇到的问题]

环境信息

  • 操作系统:如 Ubuntu 24.04

  • 软件版本:OpenUBMC2606

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

分析结论

[详细总结您对此问题的分析结论]

答案内容由AI生成,仅供参考:

建议的解决方案

  1. 确保构建环境外网连通:在能够访问外网的环境中执行首次构建,之后可利用缓存进行重复构建(但容器迁移无效)。
  2. 手动两步构建(针对内网/离线环境):
    • 在外网容器中完成 webui 的 npm install && npm run build,并打好镜像。
    • 在内网容器中手动执行 npm install && npm run build(跳过 conan 的自动化脚本),确认构建成功后,再执行 bingo build 完成整包构建。
  3. 修改构建脚本(仅限可接触源码时):
    • 删除 package 方法中可能触发网络请求的前两行,然后在外网构建缓存后打包镜像到内网使用(参考离线构建分析)。
  4. 本地离线依赖缓存:
    • 提前在外网下载所有 npm 依赖,并通过 npm cache 或 node_modules 预先拷贝到构建环境,同时配置 npm 使用离线缓存(如 --offline 参数),但需验证构建脚本是否覆盖此行为。
  5. 升级 bingo 工具:使用最新版本的 bingo(如 ≥ 0.5.230),优化了网络处理逻辑,减少不必要的网络请求。

注意:如果卡住并非由于网络,而是内存不足导致进程被 Killed(如错误码 137),则应增大构建环境的可用内存(建议 ≥ 16GB)或调整 Node 内存限制(NODE_OPTIONS=--max_old_space_size=4096)。

总结

webui 卡在 npm install 的核心原因是 网络依赖无法满足。推荐优先检查构建环境的网络连通性,并参考上述离线构建解决方案。若网络正常但依然卡死,需进一步分析具体卡住的步骤(是 install 还是后续 build),以区分内存或磁盘空间问题。

点击此处查看详细分析解答

根据您提供的问题描述与上下文信息,以下是对 webui 构建时经常卡在 npm install 问题的分析及参考方案。

问题描述

在执行 bingo build --stage stable -o */*:chipv2_enable=True 构建 openUBMC 时,webui 组件的构建过程经常卡在 npm install 阶段,无法正常完成依赖安装,导致构建任务无法继续。

环境信息

  • 操作系统:Ubuntu 24.04(根据您的输入)
  • 软件版本:OpenUBMC 2606
  • 硬件配置:根据实际环境填写(建议关注内存 ≥ 8GB)
  • 网络环境:可能为内网或受限网络(纯内网状态下更容易出现此问题)

重现步骤

  1. 准备 openUBMC 2606 版本的构建环境(容器或物理机)。
  2. 进入 manifest 目录,执行含 webui 组件的构建命令,例如:
    bingo build --stage stable -o */*:chipv2_enable=True
    
  3. 观察构建日志,发现 webui 组件构建时在 npm install 或后续步骤长时间卡住(无进度输出,最终可能超时)。

期望结果

webui 组件能够顺利完成 npm install 并最终构建成功,输出完整的固件包。

实际结果

构建过程卡在 npm install 阶段,日志显示依赖包下载无响应或缓慢,最终因超时或网络错误失败。部分日志片段如下(参考上下文中的类似案例):

npm install ...(长时间无输出)

或显示网络连接失败、tls 握手超时等错误(具体错误取决于网络限制)。

尝试过的解决方案及结果

  1. 手动安装依赖后再构建:在 webui 源码目录手动执行 npm install,若网络连通可完成,但后续 bingo build 仍可能卡顿(因为构建脚本中可能包含额外网络请求)。
  2. 使用离线镜像:将外网构建成功的容器打包成镜像迁移到内网,但迁移后重新构建时仍会卡死(参见 webui 离线构建失败问题分析)。
  3. 调整 npm 缓存:尝试设置 npm registry 为国内镜像或本地缓存,但部分构建脚本中的网络请求无法被覆盖。

分析结论

根本原因

  • 外部网络依赖:webui 组件的构建过程(特别是 npm install)需要从 npm 公共 registry 下载大量 JavaScript 依赖包。当构建环境处于纯内网或网络代理未正确配置时,npm install 因无法连接 registry 而卡住或失败。
  • 构建脚本设计:webui 的构建逻辑定义在 conanfile.py 中,分为 build 和 package 两个阶段。在 build 阶段,npm install 是核心步骤;在 package 阶段,可能仍有其他网络请求(如 post-build 脚本),导致容器打包迁移后无法完全脱离外网(参考文档片段)。

关键证据

  • 上下文中的 Network Dependency 概念明确指出:“webui 的构建过程在隔离环境中会因为依赖外部网络资源而失败”。
  • 离线构建问题分析指出:“容器打包迁移并不能让 webui 构建免于外网连接”,说明即使本地已有 node_modules,构建脚本中的某些步骤仍会尝试访问网络(如执行 npm run build 中的某些插件)。
  • 用户 lihang111 曾报告 webui 编译失败,其日志显示 npm install 成功但后续 npm run build 被 Killed(内存不足),但您遇到的卡在 npm install 更多指向网络层面。

建议的解决方案

  1. 确保构建环境外网连通:在能够访问外网的环境中执行首次构建,之后可利用缓存进行重复构建(但容器迁移无效)。
  2. 手动两步构建(针对内网/离线环境):
    • 在外网容器中完成 webui 的 npm install && npm run build,并打好镜像。
    • 在内网容器中手动执行 npm install && npm run build(跳过 conan 的自动化脚本),确认构建成功后,再执行 bingo build 完成整包构建。
  3. 修改构建脚本(仅限可接触源码时):
    • 删除 package 方法中可能触发网络请求的前两行,然后在外网构建缓存后打包镜像到内网使用(参考离线构建分析)。
  4. 本地离线依赖缓存:
    • 提前在外网下载所有 npm 依赖,并通过 npm cache 或 node_modules 预先拷贝到构建环境,同时配置 npm 使用离线缓存(如 --offline 参数),但需验证构建脚本是否覆盖此行为。
  5. 升级 bingo 工具:使用最新版本的 bingo(如 ≥ 0.5.230),优化了网络处理逻辑,减少不必要的网络请求。

注意:如果卡住并非由于网络,而是内存不足导致进程被 Killed(如错误码 137),则应增大构建环境的可用内存(建议 ≥ 16GB)或调整 Node 内存限制(NODE_OPTIONS=--max_old_space_size=4096)。

总结

webui 卡在 npm install 的核心原因是 网络依赖无法满足。推荐优先检查构建环境的网络连通性,并参考上述离线构建解决方案。若网络正常但依然卡死,需进一步分析具体卡住的步骤(是 install 还是后续 build),以区分内存或磁盘空间问题。

npm config set registry https://mirrors.cloud.tencent.com/npm/
换了这个源之后快多了

npm源不稳定确实会失败

但是还是很慢,为啥每次都要跑这个npm install,没法优化吗

我们之前是把构建逻辑改了下,先正常联网构建后,将node_modules打包

在无网络环境上可以通过解压node_modules,跳过npm install

我们这边是先改动conanfile.py文件,将package函数下面的两个run注释掉。然后在外网环境编译一下。

    def package(self):
        #self.run(f"rm -rf node_modules")
        #self.run(f"npm install --production")

编译OK之后,再改动build函数中的self.run(f"npm install “)改成self.run(f"npm install --offline”)。然后打包docker镜像在内网编译的

webui编译失败的大部分都是软件源配置不当、软件源限速等原因,有条件的可以部署npm私有软件源。