首页 > 其他分享 >electron-webpack-react-antd环境搭建

electron-webpack-react-antd环境搭建

时间:2023-01-14 10:33:25浏览次数:56  
标签:index const electron js react webpack

详细实现方式以及代码下载请前往 https://www.passerma.com/article/81

一、项目初始化

mkdir electron-webpack-react-antd && cd electron-webpack-react-antd
yarn init -y

二、安装electron

1.安装electron

yarn add --dev electron

2.增加electron启动命令

{
  "scripts": {
    "start": "electron ."
  }
}

3.创建electron入口文件

在根目录新建 index.js 文件

// index.js

// electron 模块可以用来控制应用的生命周期和创建原生浏览窗口
const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
  // 创建浏览窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      //允许渲染进程使用node.js
      nodeIntegration: true,
      contextIsolation: false
    }
  })
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    // 在 macOS 系统内, 如果没有已开启的应用窗口
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

4.启动项目

yarn start

界面弹出白色操作框说明electron启动成功

三、安装webpack、react和antd

1.安装项目相关依赖

1) 安装react依赖

yarn add --dev react react-dom

2) 安装antd依赖

yarn add --dev antd

3) 安装webpack相关依赖

安装webpack

yarn add --dev webpack webpack-cli html-webpack-plugin

安装css转化loader

yarn add --dev style-loader css-loader

安装react转化loader

yarn add --dev babel-loader @babel/core @babel/preset-env @babel/preset-react

2.根目录创建 webpack.config.js 文件

// webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'main.js', // 编译输出js文件名
    path: path.resolve(__dirname, 'dist'), // 编译输出js路径
    clean: true // 构建前清理dist目录
  },
  mode: 'development',
  target: 'node', // node环境编译,electron内部为node环境
  resolve: {
    extensions: ['.js', '.jsx'], // 自动拾取后缀
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"] // css转化loader
      },
      {
        test: /\.js|jsx$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader", // react转化loader
          options: {
            presets: ["@babel/preset-env", "@babel/preset-react"]
          }
        }
      }
    ]
  },
  plugins: [
    // html输出插件
    new HtmlWebpackPlugin({
      template: path.join(__dirname, 'src/index.html'), // html模版文件
      hash: true // js文件添加随机字符串
    })
  ]
};

 

3.创建开发目录

1) 根目录新建 src文件夹

 

2) src下新建 index.html 文件

index.html为项目模版文件,用于electron显示内容

<!-- src/index.html -->

<!DOCTYPE html>
<html lang="zh-cn">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline';">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>electron-webpack-react-antd</title>
  </head>

  <body>
    <div id="root"></div>
  </body>

</html>

3) src下新建 index.js 文件

index.js为react项目入口文件

// src/index.js

import React from "react"
import { createRoot } from "react-dom/client";
import App from "./app";
import 'antd/dist/reset.css';
import './index.css'

const rootElement = document.getElementById("root");
const root = createRoot(rootElement);

root.render(<App />);

4) src下新建 index.css 文件

index.css为项目样式文件

/* src/index.css */

html,
body {
  margin: 0;
  padding: 0;
  overflow: hidden;
}

5) src下新建 app.jsx 文件

app.jsx为业务代码

// src/app.jsx

import React, { useRef } from "react"
import { Button } from 'antd';
import { join } from 'path'
import { readFileSync } from 'fs'

export default () => {
  const div = useRef(null)

  const get = () => {
    // 使用node api读取项目package.json
    const path = join(__dirname, '../package.json')
    const data = readFileSync(path, 'UTF-8').toString()
    div.current.innerText = data
  }

  return <div>
    <Button type="primary" onClick={get}>按钮</Button>
    <div ref={div}></div>
    </div>;
}

4.完整项目结构概览

四、项目启动前操作

1.增加编译界面代码

修改项目 package.json 文件下的 scripts ,增加webpack编译命令

{
  "scripts": {
    "start": "electron .",
    "watch": "webpack --watch --config webpack.config.js"
  }
}

2.修改electron入口文件

修改根目录下的index.js文件,在mainWindow变量初始化下加载编译出的index.html文件

修改完成的内容如下

// index.js

// electron 模块可以用来控制应用的生命周期和创建原生浏览窗口
const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
  // 创建浏览窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      //允许渲染进程使用node.js
      nodeIntegration: true,
      contextIsolation: false
    }
  })
  // 加载dist目录下的index.html文件
  mainWindow.loadFile(path.join(__dirname, 'dist/index.html'))
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    // 在 macOS 系统内, 如果没有已开启的应用窗口
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

3.同时编译react项目和启动electron

安装 concurrently

yarn add --dev concurrently

使用 concurrently

修改项目 package.json 文件下的 scripts ,增加concurrently编译命令

{
  "scripts": {
    "start": "electron .",
    "watch": "webpack --watch --config webpack.config.js",
    "dev": "concurrently \"yarn watch\" \"yarn start\""
  },
}

五、启动项目

yarn dev

等待webpack编译完成后刷新页面后,点击按钮,看到以下页面

大功告成

六、代码下载

详细实现方式以及代码下载请前往 https://www.passerma.com/article/81

标签:index,const,electron,js,react,webpack
From: https://www.cnblogs.com/passerma/p/17051364.html

相关文章

  • React Native 0.71 All In One
    ReactNative0.71AllInOneTodaywe’rereleasingReactNativeversion0.71!Thisisafeature-packedreleaseincluding:TypeScriptbydefaultSimplifyingla......
  • React中实现keepalive组件缓存效果
    背景:由于react官方并没有提供缓存组件相关的api(类似vue中的keepalive),在某些场景,会使得页面交互性变的很差,比如在有搜索条件的表格页面,点击某一条数据跳转到详情页面,再返回......
  • 28、electron 发送http请求,数据接收不完整
    electron发送http请求,参考官网api:https://www.electronjs.org/zh/docs/latest/api/net#netrequestoptionshttps://www.electronjs.org/zh/docs/latest/api/client-requ......
  • 跳过设置!直接使用KendoReact模板创建React应用程序
    KendoUI致力于新的开发,来满足不断变化的需求。现在我们非常自豪地宣布,通过React框架的KendoUIJavaScript封装来支持ReactJavascript框架。KendoReact能够为客户提供更......
  • react中二维码生成
    参考文档:https://blog.csdn.net/weixin_45022563/article/details/124843593 awesomeqr/react案例:注意需要给父级div设置高宽下载:yarnadd@awesomeqr/react......
  • webpack打包进行丑化压缩遇到(TypeError Cannot read property 'compilation' of unde
    今天再重新配置老项目node打包环境的时候遇到了一个问题。在打包的时候报:TypeError:Cannotreadproperty'compilation'ofundefined错误。(这里需要强调一下,安装环......
  • webpack插件之html-webpack-plugin
    html-webpack-plugin的作用html-webpack-plugin的主要作用就是在webpack构建后生成html文件,同时把构建好入口js文件引入到生成的html文件中。安装html-webpack-pluginW......
  • React Context 详细介绍(状态共享、数据传递)
    Context是什么?Context提供了一个无需为每层组件手动添加props,就能在组件树间进行数据传递的方法。在一个典型的React应用中,数据是通过props属性自上而下(由父及子)进......
  • React面试宝典
    React面试宝典一、组件基础梳理组件设计原理与思路分析和解决问题的技巧1.React原理......
  • Webpack 入门
    Webpack入门如果你不想一步一步的学习,也可以直接从头到尾的阅读一遍,然后直接去将案例下载下来,假设有不懂的可以再回来看一遍.前言什么是WebpackWebpack可以看......