Electron入门教程1 —— 编写第一个桌面应用程序

前言: 最近临时起意,想开发桌面应用程序,但是我们肯定都先会想到微软的C#。而我又不想花时间去学习C#,而且就算学了C#,还是很难快速开发出好看的Windows桌面应用。所以此时我就想,既然移动app都能用vue来写,那Windows的桌面应用程序是不是也可以用Vue等web前端技术来开发呢?还真可以,那就是Electron这个框架。首先声明,我自己也在学习Electron这个框架,所以就有了这个系列教程。你的电脑里得安装好Node.js,并且你得对Node.js和npm包管理工具的使用有基本的了解,本教程不会讲解这些过于基础的知识。

关于Electron这个框架我就不多介绍,它说白了就是Node和Chromium内核的一种封装。用它开发出来的桌面应用程序其实就是套壳浏览器的应用,这就是为什么它可以用web前端技术来开发,并且可以跨平台的原因了。

✧ 安装Electron Fiddle工具

在开发第一个桌面应用之前,我要向大家推荐一款官方的工具,这个工具叫Electron Fiddle ,我们可以在这个工具里面调试代码,你可以更改里面的样例代码运行,或者把自己的项目代码添加进行运行,一般用来调试功能。
在这里插入图片描述

✧ 编写第一个桌面应用程序

1.创建一个项目文件夹,并cd到该文件夹下面。

mkdir my-electron-app
cd my-electron-app

2.初始化项目文件夹

npm init

注意: entry point应该是main.js , authordescription可以是任何值,但对于应用程序打包是必需的。

{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "my first app",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "haiexijun",
  "license": "ISC"
}

3.安装electron

npm install --save-dev electron

4.配置electron项目的运行命令,在package.json中的scripts下添加start命令

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

5.在项目的根目录下创建index.html ,先添加如下的代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
  </body>
</html>

这个页面会显示Hello World ! 以及正在运行的 Chromium、Node.js 和 Electron 版本的信息。

6.在项目的根目录下创建一个名为main.js的文件,这个文件是整个应用程序的入口

// 我们需要导入两个electron模块
const { app, BrowserWindow } = require('electron')

// 创建一个createWindow()函数,用于将index.html加载到新BrowserWindow实例中
const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600
    })

    let promise = win.loadFile('index.html');
}
// 调用这个createWindow()函数来打开你的窗口
app.whenReady().then(() => {
    createWindow()
})

运行npm start 就可以启动程序了。

下面对代码再做一下解释:
app模块是用于控制应用程序生命周期的模块。BrowserWindow模块是用于创建和管理应用程序窗口的模块。在 Electron 中,浏览器窗口只能在app模块的ready事件触发后才会创建。您可以使用app.whenReady()等待此事件 。

通常,您可以使用process全局platform属性来运行专门针对某些操作系统的代码。platform属性返回一个字符串,该字符串标识编译Node.js二进制文件的操作系统平台。常见属性值有:win32darwin(mac OS系统内核)、linux

关闭所有窗口后退出应用程序(Windows 和 Linux) , 退出所有窗口通常会完全退出应用程序
要实现这一点,请监听app模块的'window-all-closed' 事件,如果用户不在 macOS ( darwin) 上则调用app.quit()

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

Linux 和 Windows 应用程序在没有打开窗口时会退出,而 macOS 应用程序通常会在没有打开任何窗口的情况下继续运行,并且在没有可用窗口时激活应用程序应该打开一个新窗口。要实现此功能,请侦听app模块的activate事件,如果没有打开浏览器窗口,则调用您现有的createWindow()方法。因为不能在事件之前创建窗口,所以你应该只在你的应用程序ready之后。activate通过在现有whenReady()回调中附加事件侦听器来做到这一点。

// 调用这个createWindow()函数来打开你的窗口
app.whenReady().then(() => {
    createWindow()

// 监听窗口激活的事件
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0){
            createWindow()
        } 
    })
    
})

7.使用预加载脚本
现在,要做的最后一件事是打印出Electron的版本号和它的依赖关系到你的网页上。在主进程中通过Node的全局进程对象访问这些信息是很简单的。但是,您不能仅仅从主进程编辑DOM,因为它无法访问渲染器的文档上下文。它们处于完全不同的进程中! 关于这些进程相关的以后具体学习讲解。

预加载脚本在渲染进程被加载之前运行,并且可以访问渲染全局变量(例如窗口和文档)和Node.js环境。

在根目录下创建一个preload.js文件,这是预加载脚本:

window.addEventListener('DOMContentLoaded', () => {
    const replaceText = (selector, text) => {
        const element = document.getElementById(selector)
        if (element) element.innerText = text
    }

    for (const dependency of ['chrome', 'node', 'electron']) {
        replaceText(`${dependency}-version`, process.versions[dependency])
    }
})

上面的代码访问Node.js进程。版本对象,并运行replaceText函数,将版本号插入HTML文档。要将此脚本附加到渲染过程中,请将预加载脚本的路径传递到webPreferences。在main.js现有的BrowserWindow构造函数中的预加载选项。

const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js')
        }
    })
    let promise = win.loadFile('index.html');
}

下面是main.js的完整代码:

// 我们需要导入两个electron模块
const { app, BrowserWindow } = require('electron')
const path = require('path')

// 创建一个createWindow()函数,用于将index.html加载到新BrowserWindow实例中
const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js')
        }
    })
    let promise = win.loadFile('index.html');
}
// 调用这个createWindow()函数来打开你的窗口
app.whenReady().then(() => {
    createWindow()

// 监听窗口激活的事件
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0){
            createWindow()
        }
    })

})

// 监控窗口全部关闭的事件
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})

8.自定义js脚本的添加
此时,您可能想知道如何向您的应用程序添加更多的功能。对于任何与你想要的其他功能,你都需要添加js脚本到你的渲染过程中。因为渲染器运行在正常的web环境中,你可以在index.html文件的结束</body>标签之前添加<script>标签来包含任何你想要的脚本:
如:

<script src="./index.js"></script>

js中包含的代码可以使用与典型前端开发相同的JavaScript api,比如使用webpack来打包和缩小代码,或者使用Vue打包的代码。

9.打包发布您的应用程序
发布新应用的最快方式是使用Electron Forge
(1)添加Electron Forge作为你应用的开发依赖,并使用它的import命令来设置Forge的脚手架:

npm install --save-dev @electron-forge/cli
npx electron-forge import

在这里插入图片描述
(2)使用 Forge 的package命令打包发布成exe文件:

npm run package

out目录下面存放的是打包好的exe执行文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


到这里,教程的第一节就结束了,后面会对Electron开发的更多功能知识点进行讲解,如果你想和我一起学习electron,关注我的专栏。 最后,你的点赞是我更新的动力,谢谢路过的各位大牛!
  • 25
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
Electron 是一个基于 Node.js 和 Chromium 的桌面应用程序开发框架,可以使用 HTML、CSS 和 JavaScript 来构建跨平台的桌面应用程序。在本文中,我们将介绍如何使用 Python 和 Flask 结合 Electron 编写一个简单的桌面应用程序。 1. 安装 Electron 首先,我们需要安装 Electron。可以通过 npm 来安装它: ``` npm install electron --save-dev ``` 2. 创建 Electron 应用程序 接下来,我们需要创建一个基本的 Electron 应用程序。在项目根目录下创建一个名为 main.js 的文件,并添加以下代码: ``` const { app, BrowserWindow } = require('electron') const path = require('path') function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadFile('index.html') win.webContents.openDevTools() } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) ``` 这段代码创建了一个基本的窗口,加载了一个名为 index.html 的文件,并打开了开发者工具。 3. 创建 Flask 应用程序 然后,我们需要创建一个 Flask 应用程序。在项目根目录下创建一个名为 server.py 的文件,并添加以下代码: ``` from flask import Flask, jsonify app = Flask(__name__) @app.route('/api') def api(): return jsonify({'message': 'Hello, World!'}) if __name__ == '__main__': app.run(debug=True) ``` 这段代码创建了一个简单的 Flask 应用程序,具有一个名为 /api 的路由,返回了一个 JSON 响应。 4. 集成 Flask 应用程序 现在,我们需要将 Flask 应用程序集成到 Electron 应用程序中。在 main.js 文件中添加以下代码: ``` const { app, BrowserWindow } = require('electron') const path = require('path') const { spawn } = require('child_process') let flaskProcess = null const flaskPath = path.join(__dirname, 'server.py') function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadFile('index.html') win.webContents.openDevTools() } app.whenReady().then(() => { flaskProcess = spawn('python', [flaskPath]) createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) app.on('before-quit', () => { flaskProcess.kill() }) ``` 这段代码启动了一个 Python 进程来运行 Flask 应用程序,并在应用程序关闭之前杀死该进程。 5. 发起请求 最后,我们需要在渲染进程中发起请求。在项目根目录下创建一个名为 index.html 的文件,并添加以下代码: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello, World!</title> </head> <body> <h1 id="message"></h1> <script> const { ipcRenderer } = require('electron') ipcRenderer.on('message', (event, message) => { document.getElementById('message').textContent = message }) fetch('http://localhost:5000/api') .then(response => response.json()) .then(data => { ipcRenderer.send('message', data.message) }) .catch(error => console.error(error)) </script> </body> </html> ``` 这段代码使用 IPC 通信来从 Python 进程接收消息,并使用 fetch API 发起一个请求来获取 Flask 应用程序的响应。 6. 运行应用程序 现在,我们可以通过运行以下命令来启动应用程序: ``` npm start ``` 这将同时启动 Electron 应用程序和 Flask 应用程序,并打开一个窗口,显示来自 Flask 应用程序的消息。 至此,我们已经成功地构建了一个使用 Python、Flask 和 Electron 框架的桌面应用程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

害恶细君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值