当前位置: 首页 > article >正文

在 Ubuntu 上构建 Electron 项目时的问题记录和解决方法

文章目录

    • 0. 引言
    • 1. 问题一:依赖安装缓慢
      • 原因分析
      • 解决方案
        • 使用国内镜像源
        • 使用 `nrm` 管理 npm 镜像源
    • 2. 问题二:Electron 二进制文件下载缓慢
      • 原因分析
      • 解决方案
        • 设置 Electron 下载的国内镜像源
        • 通过 npm 配置 Electron 镜像
    • 3. 问题三:`Cannot find module 'node:path'` 错误
      • 原因分析
      • 解决方案
        • 检查 Node.js 版本
        • 使用 nvm 升级 Node.js 版本
    • 4. 问题四:`nvm install --lts` 下载速度慢
      • 原因分析
      • 解决方案
        • 设置 nvm 使用国内镜像源
    • 5. 问题五:构建脚本无法读取 Electron 版本
      • 原因分析
      • 解决方案
        • 修改构建脚本 `build.js`
        • 验证 `package.json` 文件
    • 6. 问题六:下载必须的github包缓慢
      • 在终端中设置 HTTP 和 HTTPS 代理
      • 设置 SOCKS5 代理
      • 验证代理设置是否生效
    • 7. 总结

0. 引言

今天尝试自己编译Electron架构的NxShell,遇到了一些问题,对解决过程做了一些记录。

1. 问题一:依赖安装缓慢

在执行 npm install 时,发现安装过程非常缓慢,甚至出现卡顿的情况。

原因分析

  • 网络问题:国内访问 npm 官方源可能速度较慢。
  • npm 缓存或配置问题:可能存在缓存损坏或配置不当。

解决方案

使用国内镜像源

将 npm 的源替换为国内的淘宝镜像,可以显著提升下载速度。

npm config set registry https://registry.npmmirror.com/

验证是否设置成功:

npm config get registry
# 应输出 https://registry.npmmirror.com/
使用 nrm 管理 npm 镜像源

nrm 是一个 npm 源管理工具,方便地在不同的源之间切换。

安装 nrm

npm install -g nrm

查看可用的源:

nrm ls

切换到淘宝源:

nrm use taobao

2. 问题二:Electron 二进制文件下载缓慢

在安装 Electron 时,需要下载其二进制文件(如 .zip 文件),下载速度非常慢。

原因分析

  • 下载源在国外:Electron 的二进制文件默认从 GitHub 下载,国内访问速度较慢。

解决方案

设置 Electron 下载的国内镜像源

通过设置 ELECTRON_MIRROR 环境变量,将下载源切换到淘宝镜像。

临时设置(仅当前会话有效):

export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"

永久设置(添加到 ~/.bashrc~/.zshrc):

echo 'export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"' >> ~/.bashrc
source ~/.bashrc
通过 npm 配置 Electron 镜像
npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/

3. 问题三:Cannot find module 'node:path' 错误

在运行构建脚本或安装依赖时,出现以下错误:

Error: Cannot find module 'node:path'

原因分析

  • Node.js 版本过低'node:path' 模块在较新的 Node.js 版本中才可用,旧版本中应使用 'path' 模块。

解决方案

检查 Node.js 版本
node -v

如果版本低于 16,建议升级。

使用 nvm 升级 Node.js 版本

安装 nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc  # 或 source ~/.zshrc

设置 nvm 使用淘宝镜像源:

export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/

安装最新的 LTS 版本:

nvm install --lts
nvm use --lts

验证 Node.js 版本:

node -v

4. 问题四:nvm install --lts 下载速度慢

在使用 nvm 安装最新 LTS 版本的 Node.js 时,下载速度很慢。

原因分析

  • nvm 默认从国外源下载,速度较慢。

解决方案

设置 nvm 使用国内镜像源
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/

重新运行安装命令:

nvm install --lts

5. 问题五:构建脚本无法读取 Electron 版本

在运行 node build.js 时,出现以下错误:

TypeError: Cannot read properties of undefined (reading 'electron')

原因分析

  • 构建脚本未正确加载 package.json:可能是路径问题导致无法正确加载。
  • 读取 electron 版本的位置错误electron 被定义在 devDependencies 中,但脚本可能尝试从 dependencies 中读取。

解决方案

修改构建脚本 build.js

确保正确加载 package.json,并从 devDependencies 中读取 electron 版本。

const path = require('path');
const build_packages = require(path.join(__dirname, 'package.json'));
const electron_version = build_packages['devDependencies']['electron'];
console.log(`Electron version is ${electron_version}`);

这段代码使用 __dirname 确保脚本能够正确找到 package.json

验证 package.json 文件

确保 electrondevDependencies 中正确定义。

{
  "devDependencies": {
    "electron": "17.4.1"
  }
}

6. 问题六:下载必须的github包缓慢

此时必须要网络加速了,但是我的Ubuntu 网络加速器默认是对终端不生效的,需要做如下配置(我使用的是clash)
方法如下:

在终端中设置 HTTP 和 HTTPS 代理

在终端中,使用 export 命令设置 http_proxyhttps_proxy 环境变量:

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

这将告诉终端中的命令行程序使用指定的 HTTP 代理来进行网络请求。

设置 SOCKS5 代理

如果你想使用 SOCKS5 代理,可以设置 ALL_PROXY 环境变量:

export ALL_PROXY="socks5://127.0.0.1:7891"

请注意,有些程序可能不支持 SOCKS5 代理,或者需要额外的配置。

验证代理设置是否生效

你可以通过以下命令测试代理是否生效:

curl https://www.google.com -I

7. 总结

在 Ubuntu 上构建 Electron 项目时,可能会遇到以下问题:

  • 依赖安装缓慢:使用国内镜像源(如淘宝镜像)加速 npm 和 Node.js 的下载。
  • 模块无法找到:升级 Node.js 到最新的 LTS 版本,确保兼容性。
  • 构建脚本错误:修改脚本以正确加载 package.json,并从正确的位置读取依赖版本。

http://www.kler.cn/a/322568.html

相关文章:

  • [Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
  • sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
  • 嘴尚绝卤味独特的口感
  • 智能网页内容截图工具:AI助力内容提取与可视化
  • sql中的聚合函数
  • 如何用python将pdf转换为json格式
  • Meta的LLaMA 3.2系列大模型打败OpenAI,Orion的原型AR眼镜更是引领科技新时代!
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • 初学者教程:如何使用谷歌云API
  • 怎样用云手机进行TikTok矩阵运营?
  • 力扣(leetcode)每日一题 2207 字符串中最多数目的子序列
  • Qt 窗口类的继承关系和作用
  • 语言模型发展史
  • 戴尔PowerEdge R840服务器亮黄灯 不开机
  • 一文了解智能无感知验证码
  • ios swift5 UITextView占位字符,记录限制字数
  • MATLAB中的模型预测控制(MPC)实现详解
  • 我Github的问题解决了!
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.3-2.4
  • 论文阅读:Omni-Kernel Network for Image Restoration
  • seL4 IPC(五)
  • (17)数据库neo4j数据备份
  • 鸿蒙​​​​​​保障应用开发安全的技术措施
  • Elasticsearch案例
  • Vue 23进阶面试题:(第六天)
  • 力扣面试150 寻找峰值 二分