Electron 入门(1)

前言

公司要做一个PC端游戏下载启动器项目。经过一番调研,一个典型的游戏启动器可以使用以下技术:

  • 前端: 使用 Electron 或 WPF(Windows Presentation Foundation)来创建跨平台或 Windows 桌面应用。
  • 后端: 使用 Node.js、.NET Core 或其他服务器端技术来处理用户认证、游戏更新等。
  • 数据库: 使用 MySQL、MongoDB 或其他数据库来存储用户数据、游戏信息等。

由于 WPF 是只支持 Windows 平台,无法跨平台,最终前端选择 Electron 技术栈实现。

技术架构

Electron 官方文档:https://www.electronjs.org/zh/docs/latest/

Electron 的技术架构包含:

  1. Chromium:支持最新特性的浏览器。
  2. Node.js:Javascript 运行时,可实现文件读写。
  3. Native API :提供统一的原生界面能力。

环境搭建

  1. 安装 Node.js:首先需要在系统中安装 Node.js,可以从 Node.js 官网 下载并安装最新的 LTS 版本。

    1. 检查 node.js 是否以安装及安装版本,node -v
    2. 如果版本号不是最新版本,查看 node.js 版本文档:https://nodejs.org/en/download/package-manager ,可以根据文档下载更新最新版本,但是我这里根据文档命令行不生效,选择的是直接下载安装包:https://nodejs.org/en/download/prebuilt-installer
    3. 查看 node.js 安装路径 where node
    4. 下载最新版本后重新安装(注意路径选择和之前的路径一致)
    5. node -v 查看版本是否更新到了最新版本。更新下载最新版 node.js 完成。
  2. 安装 Electron:通过 npm 安装 Electron。在命令行中运行以下命令:

    # 这是全局安装
    npm install -g electron 
    # 这是本地安装
     npm install electron --save-dev
    
  3. 设置项目:创建一个新的项目文件夹,并初始化一个新的 npm 项目:

    # 方式一
    mkdir my-electron-app && cd my-electron-app
    npm init -y
    
    #方式二
    npm init electron-app@latest my-app
    # 其中 my-app 是需要创建的项目名
    

    注意:如果使用方式二,可以没有步骤4~步骤7,直接执行步骤8中启动 demo 程序。

  4. 安装 Electron 作为项目依赖

    npm install --save-dev electron
    
  5. 创建主进程文件:在项目根目录下创建一个名为 main.js 的文件,作为应用的入口点。以下是一个简单的主进程文件示例:

    const { app, BrowserWindow } = require('electron');
    
    function createWindow() {
        const mainWindow = new BrowserWindow({
            width: 800,
            height: 600,
            webPreferences: {
                nodeIntegration: true
            }
        });
    
        mainWindow.loadFile('index.html');
    }
    
    app.whenReady().then(createWindow);
    
    app.on('window-all-closed', () => {
        if (process.platform !== 'darwin') {
            app.quit();
        }
    });
    
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
        }
    });
    
    
  6. 创建 HTML 文件:在项目根目录下创建一个名为 index.html 的文件,作为应用的主界面。以下是一个简单的 HTML 文件示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>My Electron App</title>
    </head>
    <body>
        <h1>Hello, Electron!</h1>
    </body>
    </html>
    
    
  7. 更新 package.json:在 package.json 文件中添加一个 main 字段,指向主进程文件,并添加一个 start 脚本来启动应用:

    {
        "name": "my-electron-app",
        "version": "1.0.0",
        "main": "main.js",
        "scripts": {
            "start": "electron ."
        },
        "devDependencies": {
            "electron": "^latest"
        }
    }
    
    
  8. 启动应用:在命令行中运行以下命令来启动 Electron 应用:

    npm start
    

    这里的命令是根据**package.json** 文件中 的 scripts 属性下的 start 属性定义。如果 package.json 文件中定义的是

    {
        "name": "my-electron-app",
        "version": "1.0.0",
        "main": "main.js",
        "scripts": {
            "dev": "electron ."
        },
        "devDependencies": {
            "electron": "^latest"
        }
    }
    

    启动命令就是

    npm run dev
    
  9. ctrl+c 停止运行项目。

通过上述步骤,你可以快速搭建一个简单的 Electron 开发环境,并启动一个基础的 Electron 应用。

Electron 应用程序的生命周期

在 Electron 中,应用程序的生命周期由 app 模块管理。通过监听 app 模块的各种事件,可以在特定的生命周期阶段执行相应的操作。以下是一些常用的生命周期事件及其处理方式:

  1. ready:当 Electron 初始化完成并且可以创建浏览器窗口时触发。

    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);
    
    app.on('ready', () => {
      console.log('Application is ready.');
    });
    
  2. window-all-closed:当所有窗口都被关闭时触发。默认情况下,在 macOS 上应用程序和菜单栏会保持激活状态,直到用户显式退出。

    app.on('window-all-closed', () => {
        if (process.platform !== 'darwin') {
            app.quit();
        }
    });
    
    
  3. activate:在 macOS 上,应用程序会在没有任何窗口打开的情况下被重新激活。

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            // 如果没有窗口,则创建一个新的
            createWindow();
        }
    });
    
    
  4. before-quit:在应用程序开始关闭时触发。可以在此事件中执行一些清理操作。

    app.on('before-quit', (event) => {
        console.log('应用程序即将退出');
    });
    
    
  5. will-quit:在所有窗口关闭且应用程序将退出时触发。这是执行最后清理操作的地方。

    app.on('will-quit', (event) => {
        console.log('应用程序即将完全退出');
    });
    
    
  6. quit:当应用程序退出时触发。

console 的日志输出在终端查看。

一些其他学习记录

  1. 监听主页的修改不用每次打包(这是实时监听,每次修改都会编译),在 package.json 的编译命令加上 nodemon —watch index.js(监听的文件)—exec (后面执行的命令)

     "scripts": {
        "start": "nodemon --watch index.js --exec npm run build",
        "build": "electron-forge start",
        "package": "electron-forge package",
        "make": "electron-forge make",
        "publish": "electron-forge publish",
        "lint": "echo \"No linting configured\""
      },
    

    添加完之后 执行 npm start 会实时监听 index.js 文件,监听完成会执行 npm run build ,build 命令执行的是:electron-forge start 。如果报错:nodemon: command not found,就是没有安装 nodemon 环境,执行:npm install nodemon --save-dev 本地安装即可。

  2. 启动的时候有白屏,可以在创建窗口时不设置展示,监听 ready-to-show 声明周期,准备好之后再调用 show 方法。

const createWindow = () => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    show:false, // 创建时不展示
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
    },
  });

  // and load the index.html of the app.
  mainWindow.loadFile(path.join(__dirname, 'index.html'));

// 监听生命周期方法
  mainWindow.on('ready-to-show',()=>{
    mainWindow.show()
  })
};

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow();

  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});
  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Electron 入门指的是学习如何使用 Electron 框架来开发跨平台的桌面应用程序。首先需要了解 Electron 的基本概念和架构,包括主进程和渲染进程、应用程序的生命周期等。然后需要学习如何使用 HTML、CSS 和 JavaScript 来开发界面和逻辑,并且掌握 Electron 提供的 API 来访问操作系统的底层功能,比如文件系统、网络、窗口管理等。最后需要了解如何打包和发布应用程序,以及如何调试和测试应用程序。 ### 回答2: Electron 是一个用于构建跨平台桌面应用程序的开源框架。它使用 HTML、CSS 和 JavaScript 来创建桌面应用程序,并且可以在不同的操作系统上运行,如 Windows、Mac 接来和 Linux。 学习 Electron 入门可以按照以下步骤进行: 1. 准备开发环境:首先要安装 Node.js 和 npm,它们用于安装 Electron。可以在官方网站上下载并安装最新版本的 Node.js。安装完成后,打开终端或命令提示符窗口,运行命令 `npm install -g electron` 安装 Electron。 2. 创建一个新项目:在合适的目录下创建一个新的文件夹作为项目文件夹。在终端或命令提示符中,切换到项目文件夹,并运行命令 `npm init` 创建一个新的 npm 项目。按照提示一步一步地填写项目信息。完成后,会生成一个 `package.json` 文件,用于管理项目依赖和配置。 3. 安装必要的依赖:现在,需要安装 Electron 的依赖。在终端或命令提示符中运行命令 `npm install electron --save-dev` 安装 Electron。 4. 编写主进程代码:在项目文件夹中创建一个新的 JavaScript 文件,作为 Electron 的主进程代码。主进程代码负责启动应用程序并管理窗口。 5. 编写页面代码:创建一个新的 HTML 文件,用于作为应用程序的主页面。 6. 运行 Electron:在终端或命令提示符中,切换到项目文件夹,并运行命令 `electron .` 启动应用程序。应用程序的窗口将会显示出来,同时运行主进程和页面代码。 通过上述步骤,可以快速入门 Electron,并开始构建跨平台桌面应用程序。可以通过学习 Electron 的文档、示例代码和社区资源深入了解和掌握 Electron 的更多特性和功能。 ### 回答3: electron是一种跨平台的开源桌面应用程序框架,可用于构建基于HTML、CSS和JavaScript的桌面应用程序。它通过将现代Web技术与Node.js的强大功能相结合,提供了一种简单而又强大的方式来开发可在Windows、Mac和Linux上运行的桌面应用程序。 要入门electron,首先需要安装electron的开发环境。可以通过npm(Node.js的包管理器)来安装所需的工具和依赖项。然后,创建一个新的electron项目,并安装electron所需的依赖包。接下来,可以使用任何常见的Web开发工具(如HTML、CSS和JavaScript)来进行应用程序的开发。 在electron中,应用程序的主进程由一个main.js文件来控制,而渲染进程由HTML和JavaScript文件来控制。通过main.js文件,可以创建一个主窗口并控制窗口的行为。在渲染进程中,可以使用Web技术来构建应用程序的用户界面,例如使用HTML构建页面结构,使用CSS样式化页面,使用JavaScript实现交互和动态效果。 electron还提供了许多API和功能,使开发者能够与底层操作系统进行交互,例如访问文件系统、显示原生对话框、打开外部链接等。此外,electron还支持构建可打包为独立安装包的应用程序,以便更方便地在不同操作系统上分发和部署应用程序。 总的来说,入门electron需要安装开发环境,创建项目,使用常见的Web技术进行开发,并利用electron提供的API和功能来构建强大的跨平台桌面应用程序。由于其简单易用的特点,electron已成为许多开发者喜爱的桌面应用程序开发框架之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值