Electron集成React和Vue流程方法讲解

 更新时间:2022年08月31日 09:39:31   作者:duansamve  
Electron也可以快速地将你的网站打包成一个原生应用发布,下面这篇文章主要给大家介绍了关于Electron集成React和Vue的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

集成React

1. 热调试

在React项目目录下安装Electron

npm install electron

修改package.json文件,增加或将已有的main属性值修改为main.js,在scriptes中添加"electron-start": "electron .",最终配置文件如下:

{
  "name": "electron-react",
  "version": "0.1.0",
  "main": "main.js",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.3.0",
    "@testing-library/user-event": "^13.5.0",
    "electron": "^20.0.3",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron-start": "electron ."
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

打开main.js,将

const { app, BrowserWindow, globalShortcut } = require("electron");
const path = require("path");
function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webContents: {
      openDevTools: true, //不想要控制台直接把这段删除
    }
  });
  win.loadFile("index.html");
}
app.whenReady().then(() => {
  createWindow();
  app.on("activate", () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

中的

win.loadFile("index.html");

修改为

win.loadURL("http://localhost:3000/")

打开两个终端,一个运行React

npm start

另一个执行

npm run electron-start

程序运行正常

2. 打包

默认情况下,homepage 是 http://localhost:3000,build 后,所有资源文件路径都是 /static,而 Electron 调用的入口是 file :协议,/static 就会定位到根目录去,所以找不到静态文件。在 package.json 文件中添加 homepage 字段并设置为"."后,静态文件的路径就变成了相对路径,就能正确地找到了添加如下配置:

"homepage":".",

随后运行build构建项目,构建完成后可以在build文件夹下执行index.html看看网站是否可以正确运行。

npm run build

如果可以。在main.js中将代码

win.loadURL("http://localhost:3000/")

更改为,即载入静态文件,载入URL可以作为热调试,打包时修改为静态文件。

win.loadFile("./build/index.html");

最终的文件

main.js为:

const { app, BrowserWindow, globalShortcut } = require("electron");
const path = require("path");
function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webContents: {
      openDevTools: true, //不想要控制台直接把这段删除
    }
  });
  win.loadFile("./build/index.html");
}
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为:

{
  "name": "electron-react",
  "version": "0.1.0",
  "main": "main.js",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.3.0",
    "@testing-library/user-event": "^13.5.0",
    "electron": "^20.0.3",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron-start": "electron ."
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "homepage":".",
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

目录结构为

之后的打包和平时的打包一样即可。

集成Vue

原理和集成React类似

到此这篇关于Electron集成React和Vue流程方法讲解的文章就介绍到这了,更多相关Electron集成React和Vue内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现登陆登出的实现示例

    vue实现登陆登出的实现示例

    本篇文章主要介绍了vue实现登陆登出的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Vue组件之间数据共享浅析

    Vue组件之间数据共享浅析

    本文章向大家介绍vue组件中的数据共享,主要包括vue组件中的数据共享使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下
    2022-11-11
  • Vue结合openlayers按照经纬度坐标实现锚地标记及绘制多边形区域

    Vue结合openlayers按照经纬度坐标实现锚地标记及绘制多边形区域

    OpenLayers是一个用于开发WebGIS客户端的JavaScript包,最初基于BSD许可发行。OpenLayers是一个开源的项目,其设计之意是为互联网客户端提供强大的地图展示功能,包括地图数据显示与相关操作,并具有灵活的扩展机制
    2022-09-09
  • vue3页面组件中怎么获取上一个页面的路由地址

    vue3页面组件中怎么获取上一个页面的路由地址

    这篇文章主要给大家介绍了关于vue3页面组件中怎么获取上一个页面的路由地址的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • Vue3实现组件级基类的多种方法

    Vue3实现组件级基类的多种方法

    vue3提供了 mixins和extends,但是尝试之后发现这两种方法只支持纯OptionAPI,设置的data会被识别,但是设置的setup里return 的 reactive,完全无效,setup也没有被执行,这篇文章主要介绍了Vue3实现组件级基类的几种方法,需要的朋友可以参考下
    2023-04-04
  • vue实现搜索小功能

    vue实现搜索小功能

    这篇文章主要为大家详细介绍了vue实现搜索小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • vue element-ui实现动态面包屑导航

    vue element-ui实现动态面包屑导航

    这篇文章主要为大家详细介绍了vue element-ui实现动态面包屑导航,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • vue 中使用 this 更新数据的一次问题记录

    vue 中使用 this 更新数据的一次问题记录

    这篇文章主要介绍了vue 中使用 this 更新数据的一次大坑 ,我在 vue 实例中声明了一个数组属性如 books: [],在异步请求的回调函数中使用 this.books = res.data.data; 进行数据更新,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • vue实现的网易云音乐在线播放和下载功能案例

    vue实现的网易云音乐在线播放和下载功能案例

    这篇文章主要介绍了vue实现的网易云音乐在线播放和下载功能,结合具体实例形式分析了网易云音乐相关接口调用与操作技巧,需要的朋友可以参考下
    2019-02-02
  • vue中使用/deep/失效的解决方法

    vue中使用/deep/失效的解决方法

    这篇文章主要介绍了vue中使用/deep/失效的解决办法,使用了css预处理器,则可以使用/deep/, 如果/deep/ 无效,则使用 ::v-deep,本文给大家讲解的非常详细需要的朋友可以参考下
    2022-11-11

最新评论