Electron Forge with react?
Asked Answered
W

2

8

Is there any simple way I can setup an app with Electron-Forge and React? I am usin the webpack template but don't know what to do to get jsx to work. I have the react stuff in renderer.js

Woodsman answered 20/6, 2020 at 17:57 Comment(3)
Does this help ? ankitbko.github.io/2019/08/…Ada
Well, I didn't wan't to use typescript and I figured it out.Verdugo
This guide covers the topic well and thoroughly and is confirmed working as of July 29th, 2024: sitepoint.com/electron-forge-react-build-secure-desktop-appLemnos
W
16

I figured it out,

    yarn create electron-app test --template=webpack
    cd test

Then I installed babel with:

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

and react with:

    yarn add react react-dom

Created a .babelrc in project root with the following code:

    {"presets": ["@babel/preset-env", "@babel/preset-react"]}

and added the following to webpack.rules.js:

    {
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    use: {
      loader: "babel-loader"
    }
  }

changed renderer.js to renderer.jsx and changed stuff in package.json from this:

    "@electron-forge/plugin-webpack",
      {
        "mainConfig": "./webpack.main.config.js",
        "renderer": {
          "config": "./webpack.renderer.config.js",
          "entryPoints": [
            {
              "html": "./src/index.html",
              "js": "./src/renderer.js",
              "name": "main_window"
            }
          ]
        }
      }

to this:

    "@electron-forge/plugin-webpack",
      {
        "mainConfig": "./webpack.main.config.js",
        "renderer": {
          "config": "./webpack.renderer.config.js",
          "entryPoints": [
            {
              "html": "./src/index.html",
              "js": "./src/renderer.jsx",
              "name": "main_window"
            }
          ]
        }
      }

and finally replaced renderer.jsx with this:

    import './index.css';
    import React from 'react';
    import ReactDOM from 'react-dom';
    console.log('Loaded React.');
    ReactDOM.render(<div>Test.</div>, document.getElementById('root'));

and replaced index.html with this:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>Hello World!</title>
    
      </head>
      <body>
        <div id="root"></div>
      </body>
    </html>
Woodsman answered 20/6, 2020 at 23:35 Comment(5)
I followed your code and it works. However, when I add sub-components and import (i.e. import Test from "./test"; It doesn't resolve the module unless I add ".jsx". Did you have the same problem?Simmie
@Simmie I am having the same problem. Did you find any solution for the same?Tremaine
@SathishkumarRakkiasamy and @Simmie no need just use js instead of jsx. Because he validate the regex pattern already /\.(js|jsx)$/. So use js for all react file. And change the webpack.rules.js file to renderer.js instead of renderer.jsx. And don't forget import React for each react component file. Otherwise it will not show. better open devtools mainWindow.webContents.openDevTools() on your main.js then do your code. myself it will more helpful to find this errorDrona
is itt using React-native-web also with the same step? Cause I have a existing React-native-web in mobile. which to use thisCretonne
not working with react 18 and electron forge 6Vickey
T
0

1.Create Webpack template using

yarn create electron-app my-new-app --template=webpack && cd my-new-app

2.Install dependencies

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

3.Add the following to webpack.rules.js

 {
    test: /\.jsx?$/,
    use: {
      loader: 'babel-loader',
      options: {
        exclude: /node_modules/,
        presets: ['@babel/preset-react']
      }
    }
  },
  resolve: {
    extensions: [".js", ".jsx"]
  },

4.Add React and React-dom

yarn add react react-dom

For more details refer electron-forge documentation

Tremaine answered 21/7, 2021 at 7:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.