Electron

Electron:

  • Electron은 Chromiumκ³Ό Node.jsλ₯Ό μ‚¬μš©ν•˜μ—¬ JavaScript, HTML, CSSλ₯Ό μ΄μš©ν•˜μ—¬ Windows λ˜λŠ” Mac, λ¦¬λˆ…μŠ€μ—μ„œ 직접 μ„€μΉ˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 개발 ν•  수 μžˆλ‹€. 크둜슀 ν”Œλž«νΌ μ§€μ›μœΌλ‘œ 이 μ„Έ 개의 μš΄μ˜μ²΄μ œμ—μ„œ build 되고 λ™μž‘ν•œλ‹€

Install Electron

Electron github

$ git clone https://github.com/electron/electron-quick-start 
$ cd electron-quick-start
$ npm i && npm start
  • npm i (npm install의 μ€„μž„λ§) β†’ package.json에 μ •μ˜λœ μ˜μ‘΄μ„± νŒ¨ν‚€μ§€λ“€μ„ μ„€μΉ˜ν•¨

  • npm start β†’ package.json에 μ •μ˜λœ "start" 슀크립트λ₯Ό μ‹€ν–‰

    • 보톡 electron . λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ˜μ–΄ Electron 앱이 싀행됨

초기 μ‹€ν–‰ ν™”λ©΄

Electron Debug

  • Electron은 Chromium을 μ‚¬μš©ν•˜μ˜€κΈ° λ•Œλ¬Έμ— Chromeμ—μ„œ 개발 μ‹œ μ‚¬μš©ν•˜λ˜ devToolsλ₯Ό Electronμ—μ„œλ„ μ‚¬μš©

Electronκ³Ό Chromium의 관계

Electron은 Chromium을 λ‚΄μž₯ν•œ λΈŒλΌμš°μ € 기반 ν”„λ ˆμž„μ›Œν¬ 즉, Electron 앱을 μ‹€ν–‰ν•˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ Chromium이 λŒμ•„κ°€λ©΄μ„œ HTML, CSS, JavaScriptλ₯Ό λ Œλ”λ§

πŸ”₯μ •λ¦¬ν•˜λ©΄, Chromium은 μ˜€ν”ˆμ†ŒμŠ€ μ›Ή λΈŒλΌμš°μ € 엔진이고, μ—¬λŸ¬ λΈŒλΌμš°μ €μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Electron, Edge λ“±)μ—μ„œ μ‚¬μš©λ˜κ³  μžˆλ‹€


Electron Build

  • Electron μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•œ ν›„, μ‹€μ œ μ‹€ν–‰ κ°€λŠ₯ν•œ ν”„λ‘œκ·Έλž¨(exe, dmg, AppImage λ“±)으둜 λ³€ν™˜ν•˜λŠ” 과정을 λΉŒλ“œ(Build) 라고 ν•œλ‹€

  • Electron 앱은 기본적으둜 HTML, CSS, JavaScript둜 μž‘μ„±λœ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄μ§€λ§Œ, 이λ₯Ό Windows, macOS, Linuxμ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” λ°μŠ€ν¬ν†± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ νŒ¨ν‚€μ§•ν•΄μ•Ό 함

  • Electron λΉŒλ“œλ₯Ό μ‰½κ²Œ λ„μ™€μ£ΌλŠ” νŒ¨ν‚€μ§€λ“€μ΄ μ‘΄μž¬ν•˜λ©°, λŒ€ν‘œμ μΈ λΉŒλ“œ λ„κ΅¬λ‘œ electron-builder μ‚¬μš©

  • κΈ°λ³Έ package.json μƒνƒœ

  • 본인 app등둝을 μœ„ν•΄ μˆ˜μ •ν•œ version


  • Electron이 μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ 확인

  • κ·Έ λ‹€μŒ 본격적인 κΈ°λŠ₯ κ΅¬ν˜„

    • ex)

      • μ˜€λ””μ˜€ μž¬μƒ (Howler.js, Web Audio API λ“± μ‚¬μš©)

      • 둜컬 파일 뢈러였기 (fs λͺ¨λ“ˆ μ‚¬μš©)

      • UI λ””μžμΈ (HTML, CSS, JavaScript)

      • μ„€μ • μ €μž₯ (electron-store ν™œμš©)

      • μžλ™ μ—…λ°μ΄νŠΈ (electron-updater ν™œμš©, 선택 사항)

      β†’ κΈ°λŠ₯을 ν•˜λ‚˜μ”© μΆ”κ°€ν•˜λ©΄μ„œ npm start둜 μ‹€ν–‰ν•˜λ©° ν…ŒμŠ€νŠΈ!


μ„€μΉ˜ 파일 없이 λΉŒλ“œ ν…ŒμŠ€νŠΈ (pack μ‹€ν–‰)

μ‹€ν–‰ ν›„ 확인할 사항

  • dist/ 폴더가 μƒμ„±λ˜μ—ˆλŠ”μ§€ 확인

  • dist/ν”Œλž«νΌ-unpacked/ 폴더 λ‚΄μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ 파일이 μžˆλŠ”μ§€ 확인

  • 앱이 μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ 확인

"npm run pack"은 μ„€μΉ˜ νŒŒμΌμ„ λ§Œλ“€μ§€ μ•Šκ³  μ‹€ν–‰ κ°€λŠ₯ν•œ λΉŒλ“œλ§Œ 생성함. πŸ”₯ 이 λ‹¨κ³„μ—μ„œ 파일이 μ •μƒμ μœΌλ‘œ λΉŒλ“œλ˜λŠ”μ§€ λ¨Όμ € ν™•μΈν•˜λŠ” 게 μ€‘μš”


μ΅œμ’… μ„€μΉ˜ 파일 λΉŒλ“œ (dist μ‹€ν–‰)

  • μ•± 개발이 μ™„λ£Œλ˜κ³ , μ‹€ν–‰ ν…ŒμŠ€νŠΈλ„ λ¬Έμ œμ—†λ‹€λ©΄ μ„€μΉ˜ νŒŒμΌμ„ 생성

μ‹€ν–‰ ν›„ 확인할 사항

  • dist/ 폴더에 OS별 μ„€μΉ˜ 파일이 μƒμ„±λ˜μ—ˆλŠ”μ§€ 확인

  • Windows β†’ .exe

  • macOS β†’ .dmg

  • Linux β†’ .AppImage or .deb

πŸ”₯ μ„€μΉ˜ νŒŒμΌμ„ μƒμ„±ν•œ ν›„, 직접 μ‹€ν–‰ν•΄ 보고 μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ 확인


배포 μ€€λΉ„

배포 방법 1: GitHub Release μžλ™ 배포

  1. GitHub μ €μž₯μ†Œλ₯Ό λ§Œλ“ λ‹€.

  2. electron-updaterλ₯Ό μ„€μ •ν•˜μ—¬ GitHub Releaseλ₯Ό ν†΅ν•œ μžλ™ μ—…λ°μ΄νŠΈ 지원

  3. npm run dist μ‹€ν–‰ ν›„ dist/ 폴더에 μƒμ„±λœ μ„€μΉ˜ νŒŒμΌμ„ GitHub Release에 μ—…λ‘œλ“œ

배포 방법 2: μˆ˜λ™ 배포

  • 파일 곡유 방식 dist/ 폴더에 μžˆλŠ” .exe, .dmg, .AppImage νŒŒμΌμ„ 직접 곡유

  • 자체 μ›Ήμ‚¬μ΄νŠΈμ—μ„œ λ‹€μš΄λ‘œλ“œ 링크 제곡


Electron process ꡬ쑰

  1. main process main.js

  • Electron의 핡심 둜직

  • μ•±μ˜ μ°½(Window)을 μƒμ„±ν•˜κ³  관리

  • 파일 μ‹œμŠ€ν…œ μ ‘κ·Ό, λ„€μ΄ν‹°λΈŒ κΈ°λŠ₯ 호좜, IPC 톡신 처리

  • BrowserWindowλ₯Ό 톡해 λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰

  1. renderer process renderer.js

  • UIλ₯Ό λ‹΄λ‹Ήν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ (HTML, CSS, JS μ‹€ν–‰)

  • μ‚¬μš©μžμ˜ μž…λ ₯을 κ°μ§€ν•˜κ³  화면을 μ—…λ°μ΄νŠΈ

  • Electron의 ipcRendererλ₯Ό μ‚¬μš©ν•΄ 메인 ν”„λ‘œμ„ΈμŠ€μ™€ 톡신

  • 기본적으둜 λΈŒλΌμš°μ € ν™˜κ²½κ³Ό λ™μΌν•˜κ²Œ λ™μž‘ (단, λ³΄μ•ˆ 섀정에 따라 Node.js κΈ°λŠ₯ μ œν•œ κ°€λŠ₯)

  1. preload.js

  • preload.jsλŠ” "메인 ν”„λ‘œμ„ΈμŠ€(Main)와 λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€(Renderer) μ‚¬μ΄μ˜ λ³΄μ•ˆ λΈŒλ¦Ώμ§€ μ—­ν• 

  • preload.jsλ₯Ό μ‚¬μš©ν•˜λ©΄ λ³΄μ•ˆμ„ μœ μ§€ν•˜λ©΄μ„œλ„ λ Œλ”λŸ¬μ—μ„œ 메인 ν”„λ‘œμ„ΈμŠ€μ˜ κΈ°λŠ₯(Node.js API, Electron API λ“±)을 μ‚¬μš©ν•  수 μžˆκ²Œν•΄μ€Œ

    • preload.jsκ°€ ν•„μš”ν•œ 이유

      Electronμ—μ„œλŠ” λ³΄μ•ˆμ„ κ°•ν™”ν•˜κΈ° μœ„ν•΄ nodeIntegration: falseλ₯Ό ꢌμž₯ ν•˜μ§€λ§Œ, nodeIntegration: falseλ₯Ό μ„€μ •ν•˜λ©΄ λ Œλ”λŸ¬μ—μ„œ require('electron')을 직접 μ‚¬μš©ν•  수 μ—†μŒ κ·Έλž˜μ„œ λ Œλ”λŸ¬μ—μ„œ 메인 ν”„λ‘œμ„ΈμŠ€ κΈ°λŠ₯을 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ preload.jsκ°€ ν•„μš”

Last updated