Electron
Electron:
Electronμ Chromiumκ³Ό Node.jsλ₯Ό μ¬μ©νμ¬ JavaScript, HTML, CSSλ₯Ό μ΄μ©νμ¬ Windows λλ Mac, 리λ μ€μμ μ§μ μ€μΉνμ¬ μ¬μ©ν μ μλ μ ν리μΌμ΄μ μ κ°λ° ν μ μλ€. ν¬λ‘μ€ νλ«νΌ μ§μμΌλ‘ μ΄ μΈ κ°μ μ΄μ체μ μμ build λκ³ λμνλ€
Install Electron
$ 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μμλ μ¬μ©
Menu > View > Toggle Developer Tools
λλ Ctrl + Shift + I
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 μ¬μ©
# electron-builder μ€μΉ
npm install --save-dev electron-builder
npm i -D electron-builder
κΈ°λ³Έ package.json μν
{
"name": "electron-quick-start", // ν¨ν€μ§(μ±) μ΄λ¦. νλ‘μ νΈμ κ³ μ μλ³μλ‘ μ¬μ©λ¨.
"version": "1.0.0", // μ±μ λ²μ . μ
λ°μ΄νΈ λ° λ°°ν¬ μ μ€μνκ² μ¬μ©λ¨.
"description": "A minimal Electron application", // μ± μ€λͺ
. npm ν¨ν€μ§λ λ¬Έμμμ μ°Έκ³ μ©μΌλ‘ μ¬μ©λ¨.
"main": "main.js", // Electron μ±μ μ§μ
μ (λ©μΈ νλ‘μΈμ€ νμΌ).
"scripts": {
"start": "electron ." // `npm start` μ€ν μ `electron .`μ μ€ννμ¬ μ±μ κ°λ° λͺ¨λμμ μ€ν.
},
"repository": "https://github.com/electron/electron-quick-start", // νλ‘μ νΈμ Git μ μ₯μ URL.
"keywords": [
"Electron", // Electron νλ μμν¬ κ΄λ ¨ νλ‘μ νΈμμ λνλ.
"quick", // λΉ λ₯΄κ² μμν μ μλ ν
νλ¦Ώμ΄λΌλ μλ―Έ.
"start", // μ€ννΈμ
λλ μμ ν
νλ¦Ώκ³Ό κ΄λ ¨λ¨.
"tutorial", // νν 리μΌμ© νλ‘μ νΈλΌλ μλ―Έ.
"demo" // λ°λͺ¨(μν) νλ‘μ νΈλΌλ μλ―Έ.
],
"author": "GitHub", // νλ‘μ νΈμ μμ±μ λλ μμ μ.
"license": "CC0-1.0", // νλ‘μ νΈμ λΌμ΄μ μ€. (CC0-1.0μ νΌλΈλ¦ λλ©μΈκ³Ό μ μ¬νμ¬ μμ λ‘κ² μ¬μ© κ°λ₯.)
"devDependencies": {
"electron": "^34.3.0", // Electronμ κ°λ° λ²μ μμ‘΄μ±. (^34.3.0μ 34.x.x λ²μ μ¬μ© κ°λ₯.)
"electron-builder": "^25.1.8" // Electron μ±μ μ€μΉ νμΌ(.exe, .dmg, .AppImage λ±)λ‘ λΉλνλ λꡬ.
}
}
λ³ΈμΈ appλ±λ‘μ μν΄ μμ ν version
{
"name": "kitty-player", // μ±μ μ΄λ¦ (νλ‘μ νΈ IDλ‘λ μ¬μ©λ¨)
"version": "1.0.0", // μ±μ νμ¬ λ²μ (μ
λ°μ΄νΈ λ° λ°°ν¬ μ μ¬μ©)
"description": "A simple Electron-based music player application", // μ± μ€λͺ
"main": "main.js", // Electron μ±μ μ§μ
μ (λ©μΈ νλ‘μΈμ€ νμΌ)
"scripts": {
"start": "electron .", // κ°λ° λͺ¨λμμ μ± μ€ν
"dist": "electron-builder", // μ±μ ν¨ν€μ§νμ¬ μ€ν νμΌ μμ±
"pack": "electron-builder --dir", // μ€μΉ νμΌ μμ΄ λλ ν 리 ννλ‘ λΉλ
"build:win": "electron-builder --win", // Windowsμ© μ€μΉ νμΌ λΉλ
"build:mac": "electron-builder --mac", // macOSμ© μ€μΉ νμΌ λΉλ
"build:linux": "electron-builder --linux" // Linuxμ© μ€μΉ νμΌ λΉλ
},
"repository": {
"type": "git",
"url": "https://github.com/invisible-bo/kitty_player"
},
"keywords": [
"Electron", // Electron κΈ°λ° μ±
"Music Player", // μμ
νλ μ΄μ΄ μ±μμ λͺ
μ
"Audio", // μ€λμ€ κ΄λ ¨ μ±
"Desktop App", // λ°μ€ν¬ν μ ν리μΌμ΄μ
"Media Player" // λ―Έλμ΄ νλ μ΄μ΄ κ΄λ ¨ κΈ°λ₯
],
"author": "invisible-bo", // λ€ μ΄λ¦μΌλ‘ λ³κ²½
"license": "MIT", // λΌμ΄μ μ€λ₯Ό MITλ‘ λ³κ²½ (μ€νμμ€ λ°°ν¬ κ°λ₯)
"devDependencies": {
"electron": "^34.3.0", // Electron νλ μμν¬ (μ± μ€νμ νμ)
"electron-builder": "^25.1.8", // μ±μ λ°°ν¬ κ°λ₯ν μ€ν νμΌλ‘ λΉλνλ ν¨ν€μ§
"electron-store": "^8.1.0", // λ‘컬 μ€μ μ μ₯μ μν ν¨ν€μ§
"electron-updater": "^5.5.0", // μλ μ
λ°μ΄νΈ κΈ°λ₯ μΆκ°
"fs-extra": "^11.1.1" // νμΌ μμ€ν
κ΄λ¦¬ κΈ°λ₯ κ°ν
},
"build": {
"appId": "com.bo.kittyplayer", // μ±μ κ³ μ μλ³μ (λ°°ν¬ μ νμ)
"productName": "Kitty Player", // λΉλλ μ±μ νμ μ΄λ¦
"directories": {
"output": "dist" // λΉλλ κ²°κ³Όλ¬Όμ΄ μ μ₯λ ν΄λ
},
"files": [ //μ±μ λΉλν λ ν¬ν¨ν νμΌ λ° ν΄λ λͺ©λ‘μ μ μ
"main.js", //electron-builderκ° μ€νλ λ, μ¬κΈ°μ λͺ
μλ νμΌλ€λ§ ν¨ν€μ§
"index.html",
"renderer.js",
"assets/**/*" //assets ν΄λ μμ λͺ¨λ νμΌκ³Ό νμ ν΄λ ν¬ν¨
],
"mac": {
"target": "dmg",
"icon": "build/icon.icns"
},
"win": {
"target": "nsis",
"icon": "build/icon.ico"
},
"linux": {
"target": "AppImage",
"icon": "build/icon.png"
}
}
}
"pack": "electron-builder --dir", κ°λ°λ¨κ³μμ μ€μΉνμΌ μμ΄ λ§λ€κ³ μ΅μ’ versionμ΄ λμ¨ νμ npm run distλ‘ μ€μΉνμΌ μμ±
npm start
Electronμ΄ μ μμ μΌλ‘ μ€νλλμ§ νμΈ
κ·Έ λ€μ 본격μ μΈ κΈ°λ₯ ꡬν
ex)
μ€λμ€ μ¬μ (Howler.js, Web Audio API λ± μ¬μ©)
λ‘컬 νμΌ λΆλ¬μ€κΈ° (
fs
λͺ¨λ μ¬μ©)UI λμμΈ (HTML, CSS, JavaScript)
μ€μ μ μ₯ (
electron-store
νμ©)μλ μ λ°μ΄νΈ (
electron-updater
νμ©, μ ν μ¬ν)
β κΈ°λ₯μ νλμ© μΆκ°νλ©΄μ
npm start
λ‘ μ€ννλ©° ν μ€νΈ!
μ€μΉ νμΌ μμ΄ λΉλ ν
μ€νΈ (pack
μ€ν)
npm run pack
μ€ν ν νμΈν μ¬ν
dist/
ν΄λκ° μμ±λμλμ§ νμΈdist/νλ«νΌ-unpacked/
ν΄λ λ΄μμ μ€ν κ°λ₯ν νμΌμ΄ μλμ§ νμΈμ±μ΄ μ μμ μΌλ‘ μ€νλλμ§ νμΈ
"npm run pack"
μ μ€μΉ νμΌμ λ§λ€μ§ μκ³ μ€ν κ°λ₯ν λΉλλ§ μμ±ν¨.
π₯ μ΄ λ¨κ³μμ νμΌμ΄ μ μμ μΌλ‘ λΉλλλμ§ λ¨Όμ νμΈνλ κ² μ€μ
μ΅μ’
μ€μΉ νμΌ λΉλ (dist
μ€ν)
μ± κ°λ°μ΄ μλ£λκ³ , μ€ν ν μ€νΈλ λ¬Έμ μλ€λ©΄ μ€μΉ νμΌμ μμ±
npm run dist
μ€ν ν νμΈν μ¬ν
dist/
ν΄λμ OSλ³ μ€μΉ νμΌμ΄ μμ±λμλμ§ νμΈWindows β
.exe
macOS β
.dmg
Linux β
.AppImage
or.deb
π₯ μ€μΉ νμΌμ μμ±ν ν, μ§μ μ€νν΄ λ³΄κ³ μ μμ μΌλ‘ λμνλμ§ νμΈ
λ°°ν¬ μ€λΉ
λ°°ν¬ λ°©λ² 1: GitHub Release μλ λ°°ν¬
GitHub μ μ₯μλ₯Ό λ§λ λ€.
electron-updater
λ₯Ό μ€μ νμ¬ GitHub Releaseλ₯Ό ν΅ν μλ μ λ°μ΄νΈ μ§μnpm run dist
μ€ν νdist/
ν΄λμ μμ±λ μ€μΉ νμΌμ GitHub Releaseμ μ λ‘λ
λ°°ν¬ λ°©λ² 2: μλ λ°°ν¬
νμΌ κ³΅μ λ°©μ
dist/
ν΄λμ μλ.exe
,.dmg
,.AppImage
νμΌμ μ§μ 곡μμ체 μΉμ¬μ΄νΈμμ λ€μ΄λ‘λ λ§ν¬ μ 곡

Electron process ꡬ쑰
main process
main.js
Electronμ ν΅μ¬ λ‘μ§
μ±μ μ°½(Window)μ μμ±νκ³ κ΄λ¦¬
νμΌ μμ€ν μ κ·Ό, λ€μ΄ν°λΈ κΈ°λ₯ νΈμΆ, IPC ν΅μ μ²λ¦¬
BrowserWindow
λ₯Ό ν΅ν΄ λ λλ¬ νλ‘μΈμ€λ₯Ό μ€ν
renderer process
renderer.js
UIλ₯Ό λ΄λΉνλ νλ‘μΈμ€ (HTML, CSS, JS μ€ν)
μ¬μ©μμ μ λ ₯μ κ°μ§νκ³ νλ©΄μ μ λ°μ΄νΈ
Electronμ
ipcRenderer
λ₯Ό μ¬μ©ν΄ λ©μΈ νλ‘μΈμ€μ ν΅μκΈ°λ³Έμ μΌλ‘ λΈλΌμ°μ νκ²½κ³Ό λμΌνκ² λμ (λ¨, 보μ μ€μ μ λ°λΌ Node.js κΈ°λ₯ μ ν κ°λ₯)
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