• Electron集成React和Vue


    一、集成React

    1. 热调试

    React项目目录下安装Electron

    npm install electron

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

    1. {
    2. "name": "electron-react",
    3. "version": "0.1.0",
    4. "main": "main.js",
    5. "private": true,
    6. "dependencies": {
    7. "@testing-library/jest-dom": "^5.16.5",
    8. "@testing-library/react": "^13.3.0",
    9. "@testing-library/user-event": "^13.5.0",
    10. "electron": "^20.0.3",
    11. "react": "^18.2.0",
    12. "react-dom": "^18.2.0",
    13. "react-scripts": "5.0.1",
    14. "web-vitals": "^2.1.4"
    15. },
    16. "scripts": {
    17. "start": "react-scripts start",
    18. "build": "react-scripts build",
    19. "test": "react-scripts test",
    20. "eject": "react-scripts eject",
    21. "electron-start": "electron ."
    22. },
    23. "eslintConfig": {
    24. "extends": [
    25. "react-app",
    26. "react-app/jest"
    27. ]
    28. },
    29. "browserslist": {
    30. "production": [
    31. ">0.2%",
    32. "not dead",
    33. "not op_mini all"
    34. ],
    35. "development": [
    36. "last 1 chrome version",
    37. "last 1 firefox version",
    38. "last 1 safari version"
    39. ]
    40. }
    41. }

    打开main.js,将

    1. const { app, BrowserWindow, globalShortcut } = require("electron");
    2. const path = require("path");
    3. function createWindow() {
    4. const win = new BrowserWindow({
    5. width: 800,
    6. height: 600,
    7. webContents: {
    8. openDevTools: true, //不想要控制台直接把这段删除
    9. }
    10. });
    11. win.loadFile("index.html");
    12. }
    13. app.whenReady().then(() => {
    14. createWindow();
    15. app.on("activate", () => {
    16. if (BrowserWindow.getAllWindows().length === 0) {
    17. createWindow();
    18. }
    19. });
    20. });
    21. app.on("window-all-closed", () => {
    22. if (process.platform !== "darwin") {
    23. app.quit();
    24. }
    25. });

    中的 

    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为:

    1. const { app, BrowserWindow, globalShortcut } = require("electron");
    2. const path = require("path");
    3. function createWindow() {
    4. const win = new BrowserWindow({
    5. width: 800,
    6. height: 600,
    7. webContents: {
    8. openDevTools: true, //不想要控制台直接把这段删除
    9. }
    10. });
    11. win.loadFile("./build/index.html");
    12. }
    13. app.whenReady().then(() => {
    14. createWindow();
    15. app.on("activate", () => {
    16. if (BrowserWindow.getAllWindows().length === 0) {
    17. createWindow();
    18. }
    19. });
    20. });
    21. app.on("window-all-closed", () => {
    22. if (process.platform !== "darwin") {
    23. app.quit();
    24. }
    25. });

    package.json为:

    1. {
    2. "name": "electron-react",
    3. "version": "0.1.0",
    4. "main": "main.js",
    5. "private": true,
    6. "dependencies": {
    7. "@testing-library/jest-dom": "^5.16.5",
    8. "@testing-library/react": "^13.3.0",
    9. "@testing-library/user-event": "^13.5.0",
    10. "electron": "^20.0.3",
    11. "react": "^18.2.0",
    12. "react-dom": "^18.2.0",
    13. "react-scripts": "5.0.1",
    14. "web-vitals": "^2.1.4"
    15. },
    16. "scripts": {
    17. "start": "react-scripts start",
    18. "build": "react-scripts build",
    19. "test": "react-scripts test",
    20. "eject": "react-scripts eject",
    21. "electron-start": "electron ."
    22. },
    23. "eslintConfig": {
    24. "extends": [
    25. "react-app",
    26. "react-app/jest"
    27. ]
    28. },
    29. "homepage":".",
    30. "browserslist": {
    31. "production": [
    32. ">0.2%",
    33. "not dead",
    34. "not op_mini all"
    35. ],
    36. "development": [
    37. "last 1 chrome version",
    38. "last 1 firefox version",
    39. "last 1 safari version"
    40. ]
    41. }
    42. }

    目录结构为

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

    二、集成Vue

    原理和集成React类似

  • 相关阅读:
    计算机组成原理_1
    HLS学习2:使用ARM核点灯
    苹果0day漏洞紧急修复;美国大力打击间谍软件公司;黑客利用Docker Redis漏洞进行挖矿| 安全周报 0308
    node-sass已弃用了,升级sass-loader
    Java设计模式之代理模式(静态、动态)
    【单目标优化求解】基于matlab平衡算法求解单目标优化问题【含Matlab源码 2114期】
    IP-Guard申请外发流程说明步骤
    JVM阶段(4)-回收策略
    深度分析React源码中的合成事件
    win10打不开蓝牙,怎么办?几招解决
  • 原文地址:https://blog.csdn.net/duansamve/article/details/126478410