electron.js에 react.js를 연동해서 채팅앱을 만들고 싶어 초기 세팅을 진행해보았다.
거두절미하고 과정 바로 시작.
1. Node.js와 npm 설치 및 새 프로젝트 폴더 생성
- electron.js 폴더가 위치하게 될 것이다. 나는 /electron.js라는 폴더를 만들었다.
2. /electron.js 디렉토리에 아래 명령어로 package.json 생성
npm init
3. 같은 디렉토리에서 아래 명령어로 electron 설치
npm install electron --save-dev
4. package.json에 아래처럼 적는다. main파일은 main.js가 될 것이다.
main.js는 electron.js에서 가장 근간이 되는 파일로 생명주기 흐름을 관리할 예정.
{
"name": "electron_name",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron .",
"pack": "electron-packager . electron_name --platform=win32 --arch=x64"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "^26.2.2",
"electron-packager": "^17.1.2"
}
}
5. main.js에서 다음과 같이 적는다:
const { app, BrowserWindow } = require('electron');
const path = require('path');
const url = require('url');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
const startUrl = process.env.ELECTRON_START_URL || url.format({
pathname: path.join(__dirname, '/react-app/build/index.html'),
protocol: 'file:',
slashes: true
});
mainWindow.loadURL(startUrl);
mainWindow.on('closed', function () {
mainWindow = null;
});
}
app.on('ready', createWindow);
6. 해당 디렉토리에서 react를 생성한다.
아래 명령어를 입력하면 자동으로 리액트와 관련된 폴더가 하나 생성된다. 리액트와 관련된 작업을 하기 위해서는 아래 만든 디렉토리로 한번 더 들어가야 한다.
npx create-react-app react-app
7. React 앱의 소스 코드를 실시간으로 수정하면서 Electron에서 바로 확인하려면 아래 과정대로 진행한다.
로컬 주소는 3000번을 쓰는 것으로 가정한다.
1. [REACT] 리액트 디렉토리인 react-app으로 이동 후 개발 서버 실행
- cd react-app; npm start
2. [ELECTRON] 터미널 추가 후 electron.js 디렉토리에서 환경 변수를 설정하고 Electron을 실행
- $env:ELECTRON_START_URL="http://localhost:3000"; npm start
8. 빌드를 위해서는 아래 과정을 진행한다.
1. [REACT] 리액트 디렉토리인 react-app으로 이동 후 빌드 명령어 실행, build 폴더에 결과물을 생성
- cd react-app; npm run build
2. [ELECTRON] package.json 파일의 scripts 섹션에 패키징용 스크립트 확인 및 Electron 앱 패키징
- npm run pack
'개발 이야기 > frontend' 카테고리의 다른 글
Electron 이벤트값을 다르게 설정하여 리액트 컴포넌트 재사용하기 (0) | 2023.10.13 |
---|---|
react-router-dom을 사용하는 이유와 구조 (0) | 2023.10.12 |
props로 내려줄때 원하는 부분만 가져오기 (0) | 2023.10.09 |
리액트 yarn start시 proxy 에러 해결 방법 (1) | 2023.10.09 |
Udemy 강의 Next.js & React - The Complete Guide (incl. Two Paths!) 시작! (0) | 2023.10.09 |
댓글