欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。

【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。

2025/2/6 14:01:32 来源:https://blog.csdn.net/abcd2468sfdsfsd/article/details/145366069  浏览:    关键词:【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。

Electron 是一个使用 JavaScript、HTML 和 CSS 等 Web 技术创建跨平台桌面应用程序的框架。它结合了 Chromium 渲染引擎和 Node.js 运行时,允许开发者构建高质量的桌面应用。下面是一个简要的 Electron 开发教程,从基础到深入,并包括一些常见的报错问题及其解决方案。

一、介绍 Electron

Electron 能够使用前端技术栈开发桌面应用,支持 Windows、macOS 和 Linux。其主要特点包括:

  • 使用 HTML、CSS 和 JavaScript 构建用户界面。
  • 内置了对自动更新、原生菜单和通知的支持。
  • 允许开发者使用 Node.js 的 API 和任何 npm 模块。

二、创建基础 Demo

安装 Node.js:确保已安装最新版本的 Node.js。

初始化项目:

mkdir my-electron-app && cd my-electron-app
npm init -y

安装 Electron:

npm install electron --save-dev

创建主进程文件(main.js):

const { app, BrowserWindow } = require('electron')function createWindow () {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: true}})win.loadFile('index.html')
}app.whenReady().then(createWindow)

创建 index.html 文件:

<!DOCTYPE html>
<html><head><title>My Electron App</title></head><body><h1>Hello World!</h1></body>
</html>

在 package.json 中添加启动脚本:

"scripts": {"start": "electron ."
}

运行应用:

npm start

三、部分深度使用技巧

1. 模块化开发

将应用拆分为多个文件和模块,可以使代码更易于维护和扩展。例如,我们可以将主进程和渲染进程的逻辑分离,并且还可以为不同的功能创建独立的模块。

示例:分离窗口创建逻辑到单独文件

main.js (主进程入口)

const { app } = require('electron')
const createWindow = require('./window')app.whenReady().then(createWindow)app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit()}
})

window.js

const { BrowserWindow } = require('electron')
let win;function createWindow() {win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: true,contextIsolation: false,},})win.loadFile('index.html')
}module.exports = createWindow
2. 集成数据库(如 SQLite)

在 Electron 应用中集成数据库可以帮助存储数据。下面是如何在 Electron 中使用 SQLite 的简单例子。

安装 sqlite3

npm install sqlite3

在主进程中使用

const sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('./mydb.sqlite', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {if (err) {console.error(err.message);}console.log('Connected to the mydb SQlite database.');
});db.serialize(() => {db.run("CREATE TABLE lorem (info TEXT)", (err) => {if (err) {console.log("Table already exists.");} else {console.log("Table created!");}});
});db.close((err) => {if (err) {console.error(err.message);}console.log('Close the database connection.');
});

四、常见报错及解决方案

1. 无法找到模块 ‘electron’
Error: Cannot find module 'electron'
  • 原因:未安装 Electron 或者 node_modules 目录被删除。

  • 解决方案:

    • 确保已经安装了 Electron:npm install electron --save-dev
    • 检查 package.json 文件中是否有正确的依赖项。

2. 白屏或无法加载页面
Not allowed to load local resource
  • 原因:路径配置错误或者安全设置阻止了本地资源的加载。

  • 解决方案:

    • 在 main.js 中确保正确设置了文件路径:

      win.loadFile('path/to/your/index.html')
      
    • 如果使用的是 URL,则需要启用 webSecurity 设置为 false(不推荐用于生产环境)。

3. Node.js 集成相关错误
Uncaught ReferenceError: require is not defined
  • 原因:默认情况下,Electron 的渲染进程中禁用了 Node.js 集成。

  • 解决方案:

    • 在创建窗口时启用 Node.js 集成:

      webPreferences: {nodeIntegration: true,contextIsolation: false,
      }
      
4. 关于上下文隔离的问题
Unable to access property/method from preload script
  • 原因:当启用了 contextIsolation 但没有正确使用预加载脚本暴露 API 给渲染进程时会发生此问题。

  • 解决方案:

    • 使用预加载脚本来暴露必要的 API:

      // preload.js
      const { contextBridge } = require('electron');contextBridge.exposeInMainWorld('myAPI', {doSomething: () => console.log('Doing something...')
      });
      

      在渲染进程中使用暴露的 API:

      window.myAPI.doSomething();
      
5. 窗口闪烁或无法正常显示
  • 错误信息:通常没有明确的错误信息,但可能会观察到窗口尺寸不符合预期或内容显示异常。

  • 原因:可能与屏幕分辨率、DPI 设置或窗口初始化参数有关。

  • 解决方案:

    • 调整窗口大小和位置参数以适应不同的屏幕设置:

      win.setSize(800, 600, true); // 最后一个参数表示是否动画化调整大小
      
6. 打包后的应用无法运行
  • 错误信息:各种,取决于具体问题,可能是缺少某些依赖或资源文件。

  • 原因:打包工具配置不当,导致必需的文件或依赖缺失。

  • 解决方案:

    • 确保所有静态资源都被正确包含在打包过程中。
    • 对于复杂的项目,考虑使用像 electron-builder 这样的工具进行更全面的打包管理。
7. 权限不足导致的失败
EACCES: permission denied
  • 原因:尝试访问受保护的系统资源而没有足够的权限。
  • 解决方案:以管理员身份运行应用,或修改文件/目录的权限。
8. 内存泄漏
  • 错误信息:无直接错误提示,但可以看到内存使用量持续增加。
  • 原因:未能正确清理不再使用的对象或事件监听器。
  • 解决方案:确保及时释放不再需要的对象和解除事件监听器绑定。
9. 网络请求被阻止
Mixed Content: The page was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint
  • 原因:CSP(内容安全策略)设置过于严格。
  • 解决方案:适当放宽 CSP 设置,允许必要的外部请求。
10. 第三方库兼容性问题
  • 错误信息:根据具体情况而异,通常涉及特定库的功能失效。
  • 原因:使用的第三方库版本与 Electron 版本不兼容。
  • 解决方案:检查并更新第三方库至最新版本,或寻找该库的 Electron 兼容替代品。

以上是关于如何在 Electron 应用中进行更深层次开发的一些示例,包括模块化、性能优化以及与第三方服务或库的集成等。。每个部分都可以根据实际需求进一步拓展和定制。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com