4.electron之create-react-app的桌面应用程序

news2024/11/19 4:38:15

如果可以实现记得点赞分享,谢谢老铁~

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和
Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、macOS 和 Linux
的跨平台应用。

项目效果

在这里插入图片描述

文件目录

在这里插入图片描述
如果你想使用 Electron 来打包 create-react-app 项目,可以按照以下步骤进行操作:

1.打开命令行工具,并进入你想要创建项目的目录。

2.运行以下命令来创建一个新的Create React App项目:

npx create-react-app react_demo

这将在当前目录下创建一个名为my-app的新文件夹,并生成一个基本的React应用程序结构。

3.进入my-app文件夹:

cd react_demo

4.接下来,你可以运行以下命令来启动React应用程序的开发服务器:

npm start

要使用Electron将Create React App创建的React项目打包为桌面应用,请按照以下步骤操作:

1.在React项目的根目录下,安装Electron和Electron Builder:

npm install electron electron-builder --save-dev

2.在React项目的根目录下,创建一个名为electron.js的文件,并添加以下内容:

const { app, BrowserWindow } = require('electron');
const path = require('path');
const isDev = require('electron-is-dev');

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
    },
  });

  if (isDev) {
    win.loadURL('http://localhost:3000');
    win.webContents.openDevTools();
  } else {
    win.loadURL(`file://${path.join(__dirname, '../build/index.html')}`);
  }

  win.on('closed', () => {
    app.quit();
  });
}

app.on('ready', createWindow);

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

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});

3.在React项目的package.json文件中,添加以下配置:

"homepage": "./",
"scripts": {
  "electron:dev": "electron .",
  "electron:build": "electron-builder"
},
"build": {
  "appId": "com.example.react-demo",
  "files": [
    "build/**/*",
    "electron.js",
    "node_modules/**/*"
  ],
  "directories": {
    "buildResources": "assets"
  }
},
"main": "electron.js",
"author": "Your Name",
"license": "MIT"

4.运行以下命令来构建React项目:

npm run build

PS:打开build目录下的index.html文件,发现是一片空白😱,F12一下,发现是资源路径不对。解决方案是在package.json中添加"homepage": “./”。添加之后再进行build,打开index.html,就能看到正常页面了。

5.运行以下命令来启动Electron应用程序:

npm run electron:dev

这将启动Electron应用程序,并加载React应用程序的构建文件。

6.运行以下命令来打包Electron应用程序:

npm run electron:build

这将使用Electron Builder将React应用程序打包为桌面应用程序。打包后的应用程序文件将位于dist目录中。

PS: 在 Electron 中,你可以使用不同的配置来生成适用于 macOS 和 Windows 的桌面应用程序。下面是针对每个操作系统的生成步骤:

使用 Electron Builder 打包为 Mac 和 Windows 应用
生成 macOS 应用程序:

你可以使用 Electron-builder 工具来生成一个适用的macOS 的桌面应用程序。
1.在React项目的根目录下,安装 Electron Builder:

npm install electron-builder --save-dev

2.在React项目的 package.json 文件中,添加以下配置:

"build": {
  "appId": "com.example.app",
  "mac": {
    "target": "dmg"
  },
}

3.运行以下命令来构建和打包应用程序:

npx electron-builder

这将根据配置文件自动打包应用程序,并生成适用于Mac的 .dmg 文件和适用于Windows的 .exe 文件。

PS: npx electron-builder进行打包,报错,晴天霹雳一声雷~

在这里插入图片描述

分析:原来在打包时需要build\electron.js文件,这个文件的作用和main.js是一样的。
解决方法

是将electron.js放在public目录里,因为编译时public目录内的内容是会被复制到build目录下的;然后将public/electron.js指定为Electron的入口。
在public目录下新建electron.js,内容和main.js基本一致,除了将

win.loadURL('http://localhost:3000/');

修改为

win.loadURL(`file://${__dirname}/index.html`);
然后将package.json中的"main"项修改为"public/electron.js",并增加"build"项:
"build": {
  "appId": "com.example.electron-cra",
  "files": [
    "build/**/*",
    "node_modules/**/*"
  ],
  "directories":{
    "buildResources": "assets"
  },
  "extraMetadata":{
      "main":"build/electron.js"
    }
}

执行
yarn build
yarn electron-builder

这将生成一个 .dmg 安装文件,你可以在 macOS 上进行安装和使用。

生成 Windows 应用程序:

1.在 Windows 上,你可以使用 Electron-builder 工具来生成一个适用于 Windows 的桌面应用程序。
2.确保你已经按照前面提到的步骤设置好了 Electron 项目,并且已经全局安装了 Electron-builder。
3.修改你的 package.json 文件,添加以下内容:

 "build": {
    "win": {
      "icon": "public/favicon.png",
      "target": [
        {
          "target": "nsis"
        }
      ]
    }
  },

这将告诉 Electron-builder 使用 NSIS 安装程序来打包生成 Windows 应用程序。

在这里插入图片描述

收工!谢谢老铁们的点赞收藏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

typescript个人学习笔记

https://ts.xcatliu.com/basics/primitive-data-types.html 深受启发 1.剑谱第一页,初始化ts outDir表示把ts编译成js文件,文件编译后存放的位置 2.类型声明 基础数据五种 undefined可以赋值给其他类型引用类型数组对象 //定义数组一 let arr:[][]…

基于SSM的实践项目管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

电商控制台前台整合优化

前台逻辑 显示商品菜单输入id,进入某个商品检测登录和注册 根据登录和注册的状态,订单或者是购物车都需要登录。 登录:生成订单(先生成订单表,再生成订单详情表) 开发直接购买,加入购物车, …

基于SSM的志愿者管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

多用户商城系统哪种好用

多用户商城系统是一种能快速打造类似京东、天猫的商户入驻型平台系统,它一般有三种模式: 1、招商模式 商户入驻,平台收取入驻费及年费,平台做中介的模式,成交抽取服务佣金,这是一般的多用户商城的模式&…

web微服务规划

一、背景 通过微服务来搭建web系统,就要对微服务进行规划,包括服务的划分,每个服务和数据库的命名规则,服务用到的端口等。 二、微服务划分 1、根据业务进行拆分 如: 一个购物系统可以将微服务拆分为基础中心、会员…

Linux(19):基础系统设定与备份策略

系统基本设定 网络设定(手动设定与 DHCP 自动取得) 通常网络参数的取得方式常见的有底下这几种: 1.手动设定固定 IP 常见于学术网络的服务器设定、公司行号内的特定座位等。这种方式你必须要取得底下的几个参数才能够让你的 Linux 上网的: …

若依框架springboot——引入七牛云上传图片

简述 若依框架的的图片上传是默认是上传到本地,但是如果要使用oss存储到话,就需要更改代码;如何操作呢。 步骤 #mermaid-svg-DntXc8gOKxpqgIYU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;…

[多线程]一篇文章带你看懂Java中的synchronized关键字(线程安全)锁的深入理解

目录 1.前言 2.synchronized的特性 2.1synchronized前言 2.2乐观锁和悲观锁 2.3重量级锁和轻量级锁 重量级锁 : 轻量级锁: 2.4自旋锁和挂起等待锁 2.5 公平锁和非公平锁 公平锁: 非公平锁: 2.6可重入锁和不可重入锁 可…

十五 动手学深度学习v2计算机视觉 ——全连接神经网络FCN

文章目录 FCN FCN 全卷积网络先使用卷积神经网络抽取图像特征,然后通过卷积层将通道数变换为类别个数,最后通过转置卷积层将特征图的高和宽变换为输入图像的尺寸。 因此,模型输出与输入图像的高和宽相同,且最终输出通道包含了该空…

【渗透测试】常用的8种火狐插件

1、Max HacKBar 推荐理由:免费的hackbar插件,可快速使用SQL注入、XSS和Bypass等payload进行测试,可进行多种编码和解码,安装后F12即可使用。 2、FoxyProxy Standard 推荐理由:FoxyProxy是一个高级的代理管理工具&am…

如何了解蜘蛛池蚂蚁SEO

蜘蛛池是一种基于搜索引擎优化的技术手段,通过模拟蜘蛛爬行行为来提高网站在搜索引擎中的排名,从而增加网站的流量和曝光率。 编辑搜图 如何联系蚂蚁seo? baidu搜索:如何联系蚂蚁SEO? baidu搜索:如何联…

基于JavaWeb+SSM+Vue微信小程序的移动学习平台系统的设计和实现

基于JavaWebSSMVue微信小程序的移动学习平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环…

ospf 知识总结

ospf 知识总结 一、ospf的概念 - 开放式最短路径优先协议,是广泛使用的一种动态路由协议,它属于链路状态路由协议,是一个内部网关协议(IGP),用于在单一自治系统(AS)内决策路由。 - …

cmake 从零开始源码安装(Ubuntu系统)

Ubuntu 系统安装 1、安装编译工具和依赖库 ## 必要的 sudo apt install gsudo apt install make## 与make 同等级的构建工具,为了演示而安装的 sudo apt install ninja-build## 压缩工具库 sudo apt install unzip## 加密和传输(根据系统名称可能不一样…

如何使用蜘蛛池蚂蚁SEO

​蜘蛛池是一种利用搜索引擎爬虫进行推广营销的方式。它的核心是建立一个能够吸引搜索引擎爬虫的网站群,这些网站能够产生大量的优质内容,并形成一个巨大的网站群,从而吸引更多的搜索引擎爬虫。 如何联系蚂蚁seo? baidu搜索&…

JVM类加载器的分类以及双亲委派机制

目录 前言 1. 类加载器的分类: 1.1 启动类加载器(Bootstrap ClassLoader): 1.2 扩展类加载器(Extension ClassLoader): 1.3 应用程序类加载器(Application ClassLoader&#xff…

一款提高嵌入式代码质量的工具

我们通常认为,在中断中,不能执行耗时的操作,否则会影响系统的稳定性,尤其对于嵌入式编程。 ​ 对于带操作系统的程序而言,可以通过操作系统的调度,将中断处理分成两个部分,耗时的操作可以放到线…

当心这30个重要漏洞!微软发布12月补丁日安全通告

近日,亚信安全CERT监测到微软12月补丁日发布了34个漏洞的安全补丁(不包含此前发布的Microsoft Edge等安全更新),其中,4个被评为紧急,30个被评为重要。包含10个权限提升漏洞,8个远程代码执行漏洞…

cat EOF快速创建一个文件,并写入内容

在linux系统中,如果你有这个需求 vi一个文件 /etc/docker/daemon.json 在这个文件中写入内容 { "registry-mirrors": ["https://iw3lcsa3.mirror.aliyuncs.com","http://10.1.8.151:8082"],"insecure-registries":[&quo…