๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/Electron

[Electron] Electron + React ์—ฐ๋™ํ•˜๊ธฐ

by DevIseo 2023. 1. 13.

1. React์— electron ์ ์šฉํ•˜๊ธฐ

https://2ssue.github.io/programming/electron-react/

#create-react-appํ›„ electron ์ง‘์–ด๋„ฃ๊ธฐ
npm init
npm install create-react-app --save
npx create-react-app {project_name}
cd {project_name}
npm install electron --save-dev

 

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

{project_name}
โ”œโ”€โ”€ public          # ์ •์  ํŒŒ์ผ. react๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํžˆ ๋ณ€๊ฒฝํ•  ๋‚ด์šฉ์€ ์—†๋‹ค.
โ”œโ”€โ”€ src             # javascript ํŒŒ์ผ. react routing, electron๋กœ๋”ฉ ๋“ฑ์˜ ์ž‘์—…์„ ์ง„ํ–‰.
โ”‚   โ”œโ”€โ”€ App.js
โ”‚   โ”œโ”€โ”€ index.js
โ”‚   โ”œโ”€โ”€ index.css
โ”‚   โ””โ”€โ”€ ...         # ์ด ์™ธ ํŒŒ์ผ์€ ์‚ญ์ œํ•ด๋„ ๋ฌด๋ฐฉ
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ package-lock.json

electron ์‹คํ–‰ ํŒŒ์ผ ์ถ”๊ฐ€

// Modules to control application life and create native browser window
const {app, BrowserWindow} = require('electron')
const path = require('path')

function createWindow () {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })

  // and load the index.html of the app.
  mainWindow.loadFile('index.html')

  // Open the DevTools.
  // mainWindow.webContents.openDevTools()
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()

  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

mainWindow.loadFile()

⇒mainWindow.loadURL('http://localhost:3000')๋ณ€๊ฒฝ

package.json ๋ณ€๊ฒฝ ๋ฐ ์ถ”๊ฐ€

  • "main": "src/electron-starter.js"๋ฅผ ์ถ”๊ฐ€
  • script์— "electron": "electron ."์„ ์ถ”๊ฐ€
{
  "name": "electron-test",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "electron": "^7.0.1",
    "electron-builder": "^22.1.0",
    "react": "^16.11.0",
    "react-dom": "^16.11.0",
    "react-scripts": "3.2.0",
  },
  **"main": "src/electron-starter.js",**
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    
    "electron": "electron ." //์—ฌ๊ธฐ ์ถ”๊ฐ€
  }
}

react ์„œ๋ฒ„ ํ™œ์„ฑํ™”

npm start

electron ์•ฑ ์‹คํ–‰

npm run electron

2. Electron์— react ์ ์šฉํ•˜๊ธฐ

https://ohrora-developer.tistory.com/4

electron create app

npx create-electron-app electron-app
cd electron-app 

npm ํŒจํ‚ค์ง€ ์„ค์น˜

npm install

electron ์‹คํ–‰

npm start

react ํ”„๋กœ์ ํŠธ๋ฅผ electron์— ์„ค์น˜ํ•˜๊ธฐ

npx create-react-app react-electron

electron ํŒจํ‚ค์ง€ ์ถ”๊ฐ€

npm add --dev electron

Electron ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • electron package.json ์ถ”๊ฐ€
"scripts": {
	....,
	"electron": "electron ."
},

Electron Entry point ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • electron package.json root
"main": "src/main.js",

main.js ์ถ”๊ฐ€

win.loadURL('http://localhost:3000')

Reference

์ž์Šต์„œ: React ์‹œ์ž‘ํ•˜๊ธฐ - React

Building an Electron application with create-react-app

'Development > Electron' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Electron] ipcRenderer.invoke & ipcMin.handle  (0) 2023.06.15
[Electron] dialog.showOpenDialog()  (0) 2023.06.15
[Electron] electron ์•„์ด์ฝ˜ ๋„ฃ๊ธฐ  (0) 2023.01.25
[Electron]Electron-forge  (0) 2023.01.12
[Electron]Electron  (0) 2023.01.11

๋Œ“๊ธ€