[Electron] 01-2. Electron + Typescript + React 시작하기

기록용 포스팅이기에 간결히 적습니다.

하지만 질문 및 지적은 환영합니다.


 

프로젝트 경로를 만든 뒤, 일렉트론 앱을 만들어서 실행하기까지의 과정을 다룹니다.

 

경로를 만든 뒤, 해당 경로에서

npx create-react-app 앱이름 --template typescript

 

electron 관련 패키지 설치

npm i electron-is-dev

dev 환경을 인식하여 Hot-Reloading 이용하기 위함.

npm i electron electron-builder concurrently cross-env wait-on --save-dev
  • Electron-is-dev: 개발환경인지 빌드한 프로덕션환경인지 확인을 위하여 사용됨.
  • Electron : 일렉트론을 실행하기 위해서 사용됨.
  • Electron-builder : 일렉트론을 실제 프로덕션 버전으로 빌드하기 위해 사용됨.
  • concurrently : 동시에 여러 명령어를 병렬적으로 사용하기 위함.
  • cross-env : CLI환경에서 프로그램 실행 시, OS에 관계 없이 환경변수를 설정 가능하게 함.
  • wait-on : HTTP 자원, port, file등이 활성화 될 때 까지 기다려주는 cross platform

 

 

 

public 폴더 아래에 electron.js 파일 만들고 아래 입력.

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

let mainWindow;

function createWindow() {
  mainWindow = new BrowserWindow({
    width: 900,
    height: 680,
    webPreferences: {
      nodeIntegration: true,
      enableRemoteModule: true,
      devTools: isDev,
    },
  });

  mainWindow.loadURL(
    isDev
      ? "http://localhost:3000"
      : `file://${path.join(__dirname, "../build/index.html")}`
  );

  if (isDev) {
    mainWindow.webContents.openDevTools({ mode: "detach" });
  }

  mainWindow.setResizable(true);
  mainWindow.on("closed", () => (mainWindow = null));
  mainWindow.focus();
}

app.on("ready", createWindow);

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on("activate", () => {
  if (mainWindow === null) {
    createWindow();
  }
});

electron-builder가 패키징 시, create-react-app이 build한 build 폴더를 패키징하는데, 이 때 electron 앱의

엔트리 포인트가 없는 상태가 됨. 그래서 public 아래에 electron.js 만들어둬야 webpack이 build 폴더로

알아서 복사. 이름이 electron.js인 이름은 electron-builder가 인식하는 default값.

 

 

 

package.json 에서 main, homepage, scripts 아래처럼 수정

  "main": "public/electron.js",
  "homepage": "./",
  
"scripts": {
    "react-start": "react-scripts start",
    "react-build": "react-scripts build",
    "react-test": "react-scripts test",
    "react-eject": "react-scripts eject",
    "start": "concurrently \"cross-env NODE_ENV=development BROWSER=none yarn react-start\" \"wait-on http://localhost:3000 && electron .\"",
    "build": "yarn react-build && electron-builder",
    "release": "yarn react-build && electron-builder --publish=always"
  },

여기서 에러 발생 시, scripts를 아래처럼 사용. yarn 앞에 npx 붙임.

npx 생략하고 쓸 수 있는 법 모름.

  "scripts": {
    "react-start": "react-scripts start",
    "react-build": "react-scripts build",
    "react-testest": "react-scripts test",
    "react-eject": "react-scripts eject",
    "start": "concurrently \"cross-env NODE_ENV=development BROWSER=none npx yarn react-start\" \"wait-on http://localhost:3000 && electron .\"",
    "build": "npx yarn react-build && electron-builder",
    "release": "npx yarn react-build && electron-builder --publish=always"
  }

 

 

 

npm start 입력하면 윈도우 뜸.

 

 

 

참조

https://cpro95.tistory.com/185

'Front End > Electron' 카테고리의 다른 글

[Electron] 01. Electron + Typescript 시작하기  (0) 2022.07.24