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

news2024/9/25 11:06:51

文章目录

    • 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.coloradmin.cn/o/2163381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 数据单元的变量替换 - 分治、递归(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

基于yolov8+deepsort+gradio实现目标追踪演示

【效果展示】 【测试环境】 ultralytics8.2.95 gradio4.26.0 torch1.9.0cu111 理论上支持最新ultralytics版本 【实现部分代码】 with gr.Blocks() as demo:with gr.Tab("追踪"):# 使用Markdown显示文本信息,介绍界面的功能gr.Markdown(""…

linux固定串口别名

最近项目功能要求,需要将插入设备的串口设备占用的端口号固定住,这里记录一下设置过程方便以后查阅。 linux固定串口别名 配置过程相关补充 配置过程 列出当前插入USB端口的设备: lsusb查看当前设备的端口号: ls dev/查看当前设…

无人机飞手培训及巡检、吊运等飞行服务一体化技术详解

在无人机行业日益兴起的背景下,培养专业、合格的无人机飞手成为首要任务。飞手培训基础涵盖理论学习与安全意识建立两大方面。理论学习包括无人机基础知识(如无人机类型、结构、原理)、航空法规(如民用无人驾驶航空器实名制登记管…

旧衣回收小程序搭建,开发功能优势

随着人们生活水平、消费水平的提高,在日常生活中产生了大量的限制物品,为了减少浪费,越来越多的人开始重视环保回收。旧衣物作为一种新型的回收方式,也逐渐得到了大众的关注,旧衣物回收市场发展规模也在持续上升&#…

Certbot自动申请并续期https证书

Certbot自动申请并续期https证书 一、 安装 Certbot:使用命令安装 Certbot: dnf install certbot python3-certbot-nginx获取 SSL 证书:运行 Certbot 命令来获取并安装 SSL 证书。 示例命令,替换其中的域名和路径信息&#xff1a…

PHP API 框架:构建高效API的利器【电商API接口】

在当今快速发展的互联网时代,API(应用程序编程接口)已成为连接不同应用程序和服务的关键。PHP,作为一种流行的服务器端脚本语言,提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性,以及…

java并发编程笔记 之 线程和进程

文章目录 前言线程线程优先级和时间片创建多线程及运行线程的状态 进程查看进程的命令进程的通信方式 线程和进程的区别从关系上疑问集锦 前言 并发 1、并发是指在同一时间段内,计算机系统能够处理多个任务的能力。 2、在并发编程中,我们可以理解为多个…

chapter17-多线程基础——(自定义泛型)——day20

580-程序进程线程 581-并发并行 并发和并行也可以同时进行 582-继承Thread创建线程 583-多线程机制 主线程和子线程交替执行 单核:两个线程并发 多核:两个线程并行 主线程结束,不是说进程就结束,进程要等所有线程结束 584-为什…

模型Alignment之RLHF与DPO

1. RLHF (Reinforcement Learning from Human Feedback) RLHF 是一种通过人类反馈来强化学习的训练方法,它能够让语言模型更好地理解和执行人类指令。 RLHF 的三个阶段 RLHF 的训练过程一般分为三个阶段: 监督微调(Supervised Fine-Tuning,…

认知杂谈82《跳出信息茧房,持续精进》

内容摘要: 互联网时代,信息丰富,但便捷性削弱了我们的好奇心。互联网是双刃剑,快速获取知识的同时,也让我们陷入“信息茧房”,限制视野。 好奇心减少,部分原因是互联网的“懒惰效应”&#xff0…

国家标准和团体标准有什么区别?

国家标准和团体标准的区别主要体现在以下几个方面: 1. 制定标准的主体不同:国家标准是由国家机构通过并公开发布的标准;团体标准是由学会、协会、商会、联合会、产业技术联盟等社会团体协调相关市场主体共同制…

【项目实战】如何在项目中基于 Spring Boot Starter 开发简单的 SDK

什么是SDK 通常在分布式项目中,类和方法是不能跨模块使用的。为了方便开发者的调用,我们需要开发一个简单易用的SDK,使开发者只需关注调用哪些接口、传递哪些参数,就像调用自己编写的代码一样简单。实际上,RPC(远程过…

element下拉框联动 或 多选 回显数据后页面操作不生效问题解决

第一种:多选回显不生效 解决方式: 代码: <el-form-item label"系统" prop"Key"> <el-select v-model"addForm.Key" multiple placeholder"请选择" change"$forceUpdate()"> <el-option v-for"item …

Typescript高级用法

TypeScript 是一种类型安全的 JavaScript 超集&#xff0c;除了基本类型和对象类型之外&#xff0c;TypeScript 还提供了一些高级类型系统&#xff0c;使得我们可以更好地处理复杂的数据结构和业务逻辑。本文将深入探讨 TypeScript 的高级类型系统&#xff0c;以更好地理解和使…

【AI大模型应用开发】【综合实战】AI+搜索,手把手带你实现属于你的AI搜索引擎(附完整代码)

现在市面上有很多的AI搜索的应用或插件&#xff0c;一直想学习其背后的实现原理。今天咱们就学习一下&#xff0c;并且亲自动手实践&#xff0c;从0开始&#xff0c;搭建一个自己的AI搜索引擎。最终实现效果如下&#xff1a; 话不多说&#xff0c;开干。 本文代码参考&#xff…

累加求和-C语言

1.问题&#xff1a; 计算123……100的和&#xff0c;要求分别用while、do while、for循环实现。 2.解答&#xff1a; 累加问题&#xff0c;先后将100个数相加。要重复进行100次加法运算&#xff0c;可以用循环结构来实现。重复执行循环体100次&#xff0c;每次加一个数。 3.代…

02DSP学习-了解syscfg

不是哥们儿&#xff0c;学习DSP为什么不是上来就写代码啊&#xff0c;说了一堆&#xff0c;写小说呢啊&#xff1f; 你别着急&#xff0c;学习DSP本身&#xff0c;真不需要写多少代码&#xff0c;我们需要的写的是自己的算法。开车知道方向盘、油门、刹车、后视镜之后也能开&a…

【SpringBoot详细教程】-03-整合Junit【持续更新】

JUnit是一个用于Java编程语言的测试框架。它支持自动化单元测试&#xff0c;可以帮助开发人员测试代码的正确性和健壮性。JUnit提供了一组注解、断言和测试运行器&#xff0c;可以方便地编写和运行单元测试。 SpringBoot 整合 junit 特别简单&#xff0c;分为以下三步完成 在…

cmake--file

教程 参数 需要指定文件后缀 GLOB 只搜索当前目录 GLOB_RECURSE &#xff1a;搜索当前目录和其子目录&#xff08;递归搜索&#xff09; RELATIVE 相对于哪个路径进行搜索&#xff0c;获取文件的相对路径。 使用RELATIVE和不使用RELATIVE的区别&#xff1a; 1&#xff…