react+electron+AntD编辑桌面应用

一、开发的首要任务,安装node环境https://nodejs.org/zh-cn/,需要自行下载

二、要下载react,有一个快捷的方法,创建react应用,使用脚手架,下载(可选择是否全局安装):

npm install --global create-react-app

成功运行后会显示:
react+electron+AntD编辑桌面应用
三、创建react项目:

create-react-app demo

react+electron+AntD编辑桌面应用
新建完后,按着步骤执行:
react+electron+AntD编辑桌面应用
先cd demo,然后 yarn start
如果你没有yarn,可以下载下,很好用的包管理工具:

npm install -g yarn

下载完在执行yarn start,如果不想下载,可以直接npm start,也可以出来下方的这个页面
react+electron+AntD编辑桌面应用
四、.安装electron,
在刚创建好的react项目文件夹中(demo文件夹),打开命令行:

npm install electron --save

react+electron+AntD编辑桌面应用
react+electron+AntD编辑桌面应用
electron有两种进程,一个是主进程,一个渲染进程,所以必不可少的是main.js文件,
所以要在当前目录下,新建一个main.js:
注意:在main.js中的地址写的是localhost:3000,原因详见https://blog.****.net/zoepriselife316/article/details/88031218

const { app, BrowserWindow } = require('electron')
let win
function createWindow() {
    // 创建浏览器窗口。
    win = new BrowserWindow({ width: 800, height: 600 })

    // 然后加载应用的 index.html。  url 及本地文件形式
    win.loadURL('http://localhost:3000')
    // win.loadFile('public/index.html')
    
    // 打开开发者工具
    win.webContents.openDevTools()
  
    // 当 window 被关闭,这个事件会被触发。
    win.on('closed', () => {
        // 取消引用 window 对象,如果你的应用支持多窗口的话,
        // 通常会把多个 window 对象存放在一个数组里面,
        // 与此同时,你应该删除相应的元素。
        win = null
    })
}

// Electron 会在初始化后并准备
// 创建浏览器窗口时,调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
app.on('ready', createWindow)

// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
    // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
    // 否则绝大部分应用及其菜单栏会保持**。
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', () => {
    // 在macOS上,当单击dock图标并且没有其他窗口打开时,
    // 通常在应用程序中重新创建一个窗口。
    if (win === null) {
        createWindow()
    }
})

// 在这个文件中,你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件,然后用 require 导入。

在package.json中,要进行修改:

{
  "name": "react-electron-app01",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "electron": "^4.0.6",
    "react": "^16.8.3",
    "react-dom": "^16.8.3",
    "react-scripts": "2.1.5"
  },
  "main":"main.js",
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron-start":"electron ."
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

react+electron+AntD编辑桌面应用
这些写完了以后,运行electron:

npm run electron-start

react+electron+AntD编辑桌面应用
成功运行后,go on …

将public和src目录下的文件都删除,但是保留这俩文件夹,因为要用AntD进行页面的渲染;

五,下载AntD https://ant.design/docs/react/introduce-cn

yarn add antd

这样一来我们就在项目中引入了Ant-Design,但是我们还不能直接使用它,需要进行一些配置

安装react-app-rewired,这是一个自定义配置react项目的工具:

yarn add react-app-reqired --dev

然后修改根目录下的package.json:

"scripts": {
-    "start": "react-scripts start",
-    "build": "react-scripts build",
-    "test": "react-scripts test --env=jsdom",
+    "start": "react-app-rewired start",
+    "build": "react-app-rewired build",
+    "test": "react-app-rewired test --env=jsdom",
    "eject": "react-scripts eject",
    "electron-start": "electron ."
  },

这样做的目的是让start、build、test三个命令使用我们自定义的React配置而不是使用默认的。

然后在项目根目录下创建一个config-overrides.js,用于书写自定义配置:

module.exports = function override(config, env) {  return config;
};

安装babel-plugin-import,这是一个按需加载代码、样式的babel插件:

yarn add babel-plugin-import --dev

修改config-overrides.js:

const { injectBabelPlugin } = require('react-app-rewired');

  module.exports = function override(config, env) {
  config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);    return config;
  };

这样一来,Ant-Design就配置完了,配置完就可以在页面中使用了…

添加页面:
在public下新建一个html文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <title>React+Electron+AntD-App</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

这个文件将来将会作为Electron的入口网页文件

安装前端路由react-router-dom:

yarn add react-router-dom

安装完成之后,在src目录下新建一个入口js文件index.js、一个路由组件文件router.js,再创建一个文件夹叫page用于存储页面组件文件,里面再建立一个文件叫做index.js,用于存储首页组件,如下图:
react+electron+AntD编辑桌面应用

目录内容:
src/index.html: 入口文件

import React from 'react';
import ReactDom from 'react-dom';
import { MainRouter } from "./router";

ReactDom.render(  
    <MainRouter/>,
    document.getElementById('root')
);

src/router.js:以后添加新页面只需要在page中写一个新的页面组件文件,然后修改路由文件,在Switch中添加path与组件的对应关系即可。

import React from 'react';
import { HashRouter, Route, Switch } from 'react-router-dom';
import IndexPage from "./page/index.js";

export class MainRouter extends React.Component {
    render() {
        return (
            <HashRouter>
                <Switch>
                    <Route exact path={'/'} component={IndexPage} />
                </Switch>
            </HashRouter>
        );
    }
}

src/page/index.js: 首页的内容

import React from 'react';

import { DatePicker } from 'antd';

const { MonthPicker, RangePicker, WeekPicker } = DatePicker;


export default class IndexPage extends React.Component {

    onChange(date, dateString) {
        console.log(date, dateString);
    }

    render() {
        return (
            // <Calendar onPanelChange={this.onPanelChange} /> 
            <div>
                <DatePicker onChange={this.onChange} />
                <br />
                <MonthPicker onChange={this.onChange} placeholder="Select month" />
                <br />
                <RangePicker onChange={this.onChange} />
                <br />
                <WeekPicker onChange={this.onChange} placeholder="Select week" />
            </div>
        )

    }
}

写完以后,运行

yarn strat

这个应用环境就搭建成功了,在写这个代码的时候,我引入了antd,但是没有样式;
还提示我:The “injectBabelPlugin” helper has been deprecated as of v2.0.
injectBabelPlugin被损坏了,我就下载了几个包:
确保你安装’customize-cra’并[email protected]
确保你安装’less’和’less-loader’

yarn add less less-loader
yarn add customize-cra
yarn add [email protected]

然后修改config-overrides.js的文件,内容如下:

const {
    override,
    fixBabelImports,
    addLessLoader,
  } = require("customize-cra");
  
  
  module.exports = override(
    fixBabelImports("import", {
      libraryName: "antd", libraryDirectory: "es", style: true // change importing css to less
    }),
    addLessLoader({
      javascriptEnabled: true,
      modifyVars: { "@primary-color": "#1DA57A" }
    })
  );

重新运行
yarn start
就出来了:
react+electron+AntD编辑桌面应用
运行electron输入:

yarn electron-start

react+electron+AntD编辑桌面应用
可以去写自己的样式和项目了,加油!

参考链接:https://www.imooc.com/article/39978
https://github.com/timarney/react-app-rewired/issues/348