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

electron+react+esbuild入门项目

实验环境

VS code
WSL(Windows自带的Linux)

架构说明

由于我们是用electron构建桌面应用,所以不需要什么开发服务器,更不需要vite这些脚手架搭建。直接用esbuild编译JSX代码即可。Joplin这个开源的笔记系统正是这么做的,它在github上有51K的star。

项目结构

tree -I node_modules
.
├── app.jsx
├── index.html
├── main.js
└── package.json

安装依赖

npm i react react-dom
npm i -D electron esbuild

app.jsx

import React from 'react';
import ReactDOM from 'react-dom/client';function MyButton() {return (<button>按钮</button>);
}function MyApp() {return (<div><h1>hello</h1><h1>你好</h1><MyButton /></div>);
}const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyApp />);

index.html

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8" /></head><body><h1>Hello from Electron renderer!</h1><p>👋</p><div id="root"></div><script src="./out.js"></script></body>
</html>

main.js

const { app, BrowserWindow } = require('electron/main')const createWindow = () => {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: false,contextIsolation: true},// 针对X server转发的优化show: false})win.loadFile('index.html')// 窗口准备好后再显示,避免X server转发问题win.once('ready-to-show', () => {win.show()})
}app.whenReady().then(() => {createWindow()app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createWindow()}})
})app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit()}
})

package.json

上面用npm安装过依赖应该会自动生成一个package.json,添加start脚本

{"main": "main.js","scripts": {"start": "esbuild app.jsx --bundle --outfile=out.js && electron . --disable-gpu"},"devDependencies": {"electron": "^38.2.2","esbuild": "0.25.10"},"dependencies": {"react": "^18.2.0","react-dom": "^18.2.0"}
}

启动

npm run start

在这里插入图片描述

注:解决中文乱码请看我这篇文章

如何解决electron在WSL运行显示乱码的问题

http://www.dtcms.com/a/482718.html

相关文章:

  • iOS 应用加固与苹果软件混淆指南,如何防止 IPA 被反编译与二次打包?
  • jsp电商网站怎么做网络营销是什么部门
  • 网站优化体验报告百度网盟推广步骤
  • 物联网系统三层架构解析
  • 京东联手广汽、宁德时代造车!
  • PEFT适配器加载
  • React Hooks 核心规则自定义 Hooks
  • 江门网站制作 华企立方洛宁县东宋乡城乡建设局网站
  • 河南网站建设哪家有三品合一网站建设案例
  • 位运算专题总结:从变量初始化陷阱到理解异或分组
  • Linux学习笔记(八)--环境变量与进程地址空间
  • 【动态规划】题目中的「0-1 背包」和「完全背包」的问题
  • Streamlit 中文全面教程:从入门到精通
  • 大模型系列-dify
  • 推荐系统:Python汽车推荐系统 数据分析 可视化 协同过滤推荐算法 汽车租赁 Django框架 大数据 计算机✅
  • 第16讲:深入理解指针(6)——sizeof vs strlen 与 指针笔试题深度解析
  • 【iOS】PrivacyInfo.xcprivacy隐私清单文件(二)
  • 环保网站建设公司排名手机访问wordpress网站卡
  • 从零构建大模型 Build a large language model from scratch by Sebastian Raschka 阅读笔记
  • 基于Chainlit和Llamalndex的智能RAG聊天机器人实现详解
  • 18.5 GLM-4大模型私有化部署实战:3秒响应+显存降低40%优化全攻略
  • Prisma 命令安全指南
  • Linux系统下文件操作系统调用详解
  • 网站备案后需要年检吗官方网站搭建
  • 515ppt网站建设北京朝阳区属于几环
  • 5~20.数学基础
  • HTML应用指南:利用POST请求获取全国鸿蒙智行门店位置信息
  • 优先级队列(堆)-295.数据流的中位数-力扣(LeetCode)
  • 大语言模型推理本质与技术演进
  • 福田区网站建最牛视频网站建设