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

手动创建Electron+React项目框架(建议直接看最后)

创建React项目

首先需要创建一个React项项目,这里就是用create-react-app快速创建了,如果你想使用其他的工具创建React项目也是没有问题的。

> mkdir pomelo # 先创建一个空的文件夹
> cd pomelo
> npx create-react-app . # 在当前目录下创建React应用 

等待项目创建完成后,可以使用命令npm start测试项目创建是否成功。

如果没有问题的话,可以在浏览器中看到如下界面:
在这里插入图片描述

安装Electron包

这个步骤就非常常规了,在项目根目录下使用npm命令安装Electron包:

npm i electron --save-dev

话说,Electron的包是真的难安装,我经常失败,必要情况下需要使用梯子,同时配置代理端口。

创建Electron入口文件

安装完Electron之后,在项目根目录下创建一个文件夹,用于存放Electron代码。
这里我就将文件夹命名为src_electron,名字有点LOW,你可以自定义~~
然后在src_electron文件夹中创建两个文件:main.jspreload.js
main.js中写入如下代码:

const {app, BrowserWindow} = require("electron");
const path = require("path");
const dotenv = require("dotenv");
dotenv.config();

function createWindow() {
    const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, "preload.js"),
            contextIsolation: true,
            enableRemoteModule: false,
        },
    });

    console.log(process.env.NODE_ENV);
    // 加载 React 应用
    mainWindow.loadURL(
        process.env.NODE_ENV === "development"
            ? "http://localhost:3000"
            : `file://${path.join(__dirname, "../build/index.html")}`
    );

    // 打开开发者工具
    if (process.env.NODE_ENV === "development") {
        mainWindow.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();
    }
});

注意:
在代码测试阶段,我们使用Electron加载URLlocalhost:3000,但是打包之后的正式环境,需要加载build/index.html文件。

配置环境变量

在项目根目录下创建.env文件,并在其中写入:

NODE_ENV=development

然后安装dotenv,使用指令:

npm i dotenv

配置package.json

package.json文件中添加一条启动Electron的命令:

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron": "electron ./src_electron/main.js" // 加上这一行
  },

尝试启动

首先启动React

npm start

等到React启动完成后,再启动Electron

npm run electron

如果配置正确的话,Electron窗口中就会显示React页面,大概就是下面的样子:

更加优雅的启动方式

使用两个命令分别启动React和Electron虽然可以用,但是确实不够优雅。
一个更加优雅的方式是使用concurrently实现一条指令同时启动React和Electron。
首先安装concurrently

npm i concurrently --save-dev

然后编辑package.json,添加一条dev指令:

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron": "electron ./src_electron/main.js",
    "dev": "concurrently \"npm start\" \"npm run electron \"" # 注意这里
  },

这样,当我们使用命令:

npm run dev

就可以一次性完成项目启动。

当然这也有一些其他的问题,例如说:
Electron启动的比React快,会出现一定时间的页面白板。
解决的方法是使用wait-on顺序启动两个指令,但是我使用的时候一直不成功,这样凑合着也用的不错,就这样吧~~


更加优雅、正确的构建Electron+React+TS项目的方式

妈的,研究半天,还是使用 工具靠谱

npm create vite@latest my-electron-vite-project

? Select a framework: › - Use arrow-keys. Return to submit.
    Vanilla
    Vue
    React
    Preact
    Lit
    Svelte
❯   Others

? Select a variant: › - Use arrow-keys. Return to submit.
    create-vite-extra ↗
❯   create-electron-vite ↗

# Choose your preferred front-end framework language
? Project template: › - Use arrow-keys. Return to submit.
❯   Vue
    React
    Vanilla

# Enter the project to download dependencies and run them
cd my-electron-vite-project
npm install
npm run dev

相关文章:

  • vue3里面使用Socketjs之后打包完访问的时候报socketStore-BmspPEpN.js:1 WebSocket connection to
  • HarmonyOS Next应用架构设计与模块化开发详解
  • 数据:$UPC 上涨突破 5.8 USDT,近7日总涨幅达 73.13%
  • 常见中间件漏洞攻略-Tomcat篇
  • Spring Boot定时任务设置与实现
  • 5.3 位运算专题:LeetCode 371. 两整数之和
  • 区块链驱动金融第十章——走进另类币与加密货币生态系统:比特币之外的广阔天地
  • 知识库外挂 vs 大脑全开:RAG与纯生成式模型(如GPT)的终极Battle
  • vue判断组件是否有传入的slot,有就渲染slot,没有就渲染内部节点默认内容
  • MATLAB—从入门到精通的第四天:函数、绘图与数学魔法
  • 【Python机器学习】3.5. 决策树实战:基于Iris数据集
  • 使用LLama-Factory的简易教程(Llama3微调案例+详细步骤)
  • 【RabbitMQ高级特性】消息确认机制、持久化、发送方确认、TTL和死信队列
  • 腾讯云大模型知识引擎×DeepSeek | 企业应用快速接入手册
  • 【Redis实战专题】「技术提升系列」​RedisJSON核心机制与实战应用解析(入门基础篇)
  • Spring MVC配置
  • Jackson使用ArrayNode对象实现JSON列表数据(二):增、删、改、查
  • Redis 发布订阅
  • GZCTF平台搭建及题目上传
  • 基于简单神经网络的线性回归
  • 中国贸促会:有近50%的外贸企业表示将减少对美业务
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照
  • 一年吸引30多万人次打卡,江苏这个渔村是怎么做到的?
  • 一图读懂|上海海关公布一季度数据:钢材出口增长超143%
  • “五一”前多地市监部门告诫经营者:对预订客房不得毁约提价
  • 上海黄浦一季度实到外资总量全市第二,同比增速领先全市