使用React+Electron创建一个桌面程序

首先我们创建一个react应用

npx create-react-app ping
cd ping

接着我们添加electron到我们的项目

yarn add electron electron-builder --dev
yarn add electron-is-dev
yarn add concurrently --dev
yarn add wait-on --dev
yarn add cross-env --dev

接着我们配置一下package.json文件

{
  "name": "ping",
  "version": "0.1.0",
  "private": true,
  "main": "main.js",
  "homepage": "./",
  "author": {
    "name": "liu"
  },
  "dependencies": {
    "electron-is-dev": "^2.0.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron-dist": "electron-builder",
    "dev": "concurrently \"wait-on http://localhost:3000 && electron .\" \"cross-env BROWSER=none yarn start\" ",
    "dist": "react-scripts build && electron-builder"
  },
  "build": {
    "productName": "ping",
    "copyright": "Copyright © 2021 ${author}",
    "extends": null,
    "files": [
      "build/**/*",
      "main.js"
    ]
  },
  "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"
    ]
  },
  "devDependencies": {
    "@testing-library/jest-dom": "^5.16.1",
    "@testing-library/react": "^12.1.2",
    "@testing-library/user-event": "^13.5.0",
    "concurrently": "^6.5.0",
    "cross-env": "^7.0.3",
    "electron": "^16.0.5",
    "electron-builder": "^22.14.5",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "5.0.0",
    "wait-on": "^6.0.0",
    "web-vitals": "^2.1.2"
  }
}

在项目根目录下新建一个main.js文件

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

let mainWindow;

const createWindow = () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  });

  mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, './build/index.html')}`);
  mainWindow.on('closed', () => mainWindow = null);
};

app.whenReady().then(() => {
  createWindow();
});

如果要运行项目

yarn dev

打包项目

yarn dist

在dist目录下的exe就是安装程序


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注