Skip to main content

42 posts tagged with "Release"

Blog posts about new Electron releases

View All Tags

New Electron Release Cadence

· 5 min read
⚡️ 업데이트 (2021-07-14): 더 빠르게 나아갑니다!

2021년 3분기에 Chrome 팀은 릴리스 주기를 단축하여 6주에서 4주로 변경했습니다. Electron도 이에 맞춰 릴리스 주기를 조정했습니다. 더 자세한 정보는 업데이트된 8주 릴리스 주기 블로그 포스트를 참고하세요!

🎉 Electron은 이제 매 12주마다 새로운 주요 안정 버전을 출시합니다! 🎉


⚡️ 이렇게 빠른 이유는?

간단히 말해, Chromium이 계속 업데이트되기 때문에 Electron도 속도를 늦출 수 없다.

Chromium은 6주 단위로 일정하게 릴리스된다. Electron에서 최신 버전의 Chromium을 제공하려면 이 일정을 따라야 한다. Chromium의 릴리스 주기에 대한 자세한 정보는 여기에서 확인할 수 있다.

🚀 왜 12주 주기인가?

크로미엄은 6주마다 새로운 기능, 버그 수정/보안 패치, V8 개선 사항을 포함한 새로운 버전을 출시한다. Electron 사용자들은 이러한 변화를 적시에 반영해 달라는 요구를 분명히 전달했다. 그래서 우리는 안정 버전 출시 주기를 크로미엄 안정 버전 출시 주기의 절반으로 맞췄다. 첫 번째로, Electron v6.0.0은 M76을 포함하며, 2019년 7월 30일에 안정 버전으로 출시될 예정이다. 이 날짜는 Chromium M76의 출시일과 동일하다.

🚧 이 변경 사항이 내 Electron 앱에 어떤 영향을 미칠까?

이제 더 빠르게 새로운 Chromium과 V8의 기능 및 수정 사항을 사용할 수 있다. 무엇보다 중요한 것은, 이러한 새로운 변경 사항이 언제 적용될지 미리 알 수 있기 때문에, 더 나은 정보를 바탕으로 계획을 세울 수 있다는 점이다.

Electron 팀은 최신 3개의 주요 버전을 계속 지원할 예정이다. 예를 들어, 2019년 7월 30일에 v6.0.0이 안정화되면, v6.x, v5.x, v4.x를 지원하고, v3.x는 지원 종료(EOL) 상태가 된다.

💬 앱 피드백 프로그램

Electron의 베타 버전 테스트와 안정화 작업을 지원하기 위해 앱 피드백 프로그램에 참여해 주세요. 이 프로그램에 참여하는 프로젝트는 자신의 앱에서 Electron 베타 버전을 테스트하게 됩니다. 그 대가로 발견한 새로운 버그는 안정 버전 출시 시 우선적으로 처리됩니다.

📝 Electron 릴리스 역사 요약

v3.0.0 이전의 안정 버전 릴리스 결정은 일정을 따르지 않았다. v3.0.0과 v4.0.0부터 프로젝트 내부에 일정을 추가했다. 올해 초, Electron v5.0.0을 위해 처음으로 안정 버전 릴리스 날짜를 공개하기로 결정했다. 안정 버전 릴리스 날짜를 공개하는 것은 전반적으로 긍정적인 반응을 얻었으며, 앞으로도 계속 이 방식을 유지할 예정이다.

이러한 업그레이드 관련 작업을 더 효율적으로 진행하기 위해 Governance 시스템 내에 UpgradesReleases 작업 그룹을 만들었다. 이를 통해 작업의 우선순위를 더 잘 정하고 위임할 수 있게 되었으며, 이는 각 릴리스마다 더 명확해질 것으로 기대한다.

다음은 새로운 릴리스 주기가 Chromium의 릴리스 주기와 어떻게 비교되는지를 보여주는 그래프다:

Electron과 Chromium 버전 비교 선 그래프

📨 궁금한 점이 있다면 info@electronjs.org로 메일을 보내주세요.

Electron 5.0.0

· 8 min read

Electron 팀은 Electron 5.0.0 출시를 발표하게 되어 기쁘게 생각한다. npm install electron@latest 명령어를 통해 설치하거나 릴리스 페이지에서 tarball을 다운로드할 수 있다. 이번 릴리스에는 다양한 업그레이드, 수정 사항, 그리고 새로운 기능이 포함되어 있다. 여러분이 이 기능들을 활용해 무엇을 만들어낼지 기대된다! 이번 릴리스에 대한 자세한 내용은 계속해서 읽어보고, 피드백을 공유해 주길 바란다!

새로운 기능

Electron의 대부분 기능은 Chromium, Node.js, V8의 핵심 컴포넌트를 통해 제공된다. Electron은 이러한 프로젝트와 동기화를 유지하며, 사용자에게 새로운 자바스크립트 기능, 성능 개선, 보안 패치를 제공한다. Electron 5에서는 각 패키지의 주요 버전이 업데이트되었다:

Electron 5는 Electron 전용 API에도 개선 사항을 포함한다. 주요 변경 사항은 아래와 같다. 전체 변경 내역은 Electron v5.0.0 릴리스 노트에서 확인할 수 있다.

Promise 기반 API 변환

Electron 5는 Promise 기반 API 변환 프로젝트를 계속 진행하며, 기존 콜백 기반 API를 Promise 기반으로 전환하고 있다. Electron 5에서 다음 API들이 Promise 기반으로 변환되었다:

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • Cookies API
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

macOS 시스템 컬러 접근

macOS 시스템 컬러에 접근하기 위해 systemPreferences에 추가되거나 변경된 함수는 다음과 같다:

  • systemPreferences.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystemColor

프로세스 메모리 정보

현재 프로세스의 메모리 사용량 통계를 얻기 위해 process.getProcessMemoryInfo 함수가 추가되었다.

원격 API에 추가된 필터링 기능

remote API의 보안을 강화하기 위해 새로운 원격 이벤트가 추가되었다. 이제 remote.getBuiltin, remote.getCurrentWindow, remote.getCurrentWebContents, 그리고 <webview>.getWebContents에 대해 필터링을 적용할 수 있다.

BrowserWindow에서 여러 개의 BrowserView 사용하기

이제 BrowserWindow는 동일한 윈도우 내에서 여러 개의 BrowserView를 관리할 수 있다.

주요 변경 사항

패키지된 앱의 기본 동작

이제 패키지된 앱은 기본 앱과 동일하게 동작한다. 앱에 메뉴가 없으면 기본 애플리케이션 메뉴가 자동으로 생성된다. 또한 앱이 window-all-closed 이벤트를 처리하지 않으면 이 이벤트가 자동으로 처리된다.

혼합 샌드박스

이제 혼합 샌드박스 모드가 기본적으로 활성화된다. sandbox: true로 실행된 렌더러는 이제 실제로 샌드박스화되며, 이전에는 혼합 샌드박스 모드도 활성화된 경우에만 샌드박스화되었다.

보안 개선 사항

보안을 강화하기 위해 nodeIntegrationwebviewTag의 기본값이 이제 false로 설정되었다.

스펠체커가 비동기로 변경됨

SpellCheck API는 비동기 결과를 제공하도록 변경되었다.

Deprecations

Electron 5.0.0에서 새롭게 deprecated된 API들이 있으며, 이들은 6.0.0 버전에서 제거될 예정이다:

ARM 및 ARM64용 Mksnapshot 바이너리

ARM 및 ARM64용 네이티브 mksnapshot 바이너리는 더 이상 사용되지 않으며 6.0.0 버전에서 완전히 제거될 예정이다. ARM 및 ARM64 아키텍처용 스냅샷은 x64 바이너리를 사용해 생성할 수 있다.

WebContents의 ServiceWorker API

제거를 대비해 WebContents의 ServiceWorker API를 더 이상 사용하지 않는다.

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

샌드박스된 webContents에서의 자동 모듈 사용

보안성을 강화하기 위해, 아래 나열된 모듈들은 직접 require를 통해 사용하는 방식이 더 이상 권장되지 않는다. 대신, 샌드박스된 webContents 내에서 remote.require를 통해 포함해야 한다:

  • electron.screen
  • child_process
  • fs
  • os
  • path

webFrame Is독립된 세계(Isolated World) API

이전에 사용되던 webFrame.setIsolatedWorldContentSecurityPolicy, webFrame.setIsolatedWorldHumanReadableName, webFrame.setIsolatedWorldSecurityOrigin API는 webFrame.setIsolatedWorldInfo로 통합되어 더 이상 사용되지 않는다.

혼합 샌드박스

enableMixedSandbox--enable-mixed-sandbox 커맨드라인 스위치는 호환성을 위해 여전히 존재하지만, 더 이상 사용되지 않으며 아무런 효과가 없다.

2.0.x 버전 지원 종료

지원 버전 정책에 따라 2.0.x 버전의 지원이 종료되었다.

앱 피드백 프로그램

우리는 테스트를 위해 앱 피드백 프로그램을 계속 활용하고 있다. 이 프로그램에 참여하는 프로젝트들은 자신들의 앱에서 Electron 베타 버전을 테스트하고, 그 대가로 발견한 새로운 버그는 안정화 버전 출시 시 우선적으로 처리된다. 프로그램에 참여하거나 더 알아보고 싶다면 프로그램에 관한 블로그 포스트를 확인해 보길 바란다.

다음 단계

단기적으로, 팀은 Chromium, Node, V8 등 Electron을 구성하는 주요 컴포넌트의 개발 속도를 따라가기 위해 계속 노력할 것이다. 출시 일정에 대해 약속을 하지는 않지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 주요 버전을 출시할 계획이다. Electron 6.0.0의 예정된 일정은 Electron 6 개발 주기의 주요 날짜를 보여준다. 또한, Electron의 버전 관리에 대한 자세한 정보는 버전 관리 문서를 참고하면 된다.

다가오는 Electron 버전에서 예정된 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서를 확인하면 된다.

Node.js Native Addons and Electron 5.0

· 3 min read

Electron 5.0에서 네이티브 Node.js 애드온을 사용하는 데 문제가 있다면, 최신 버전의 V8과 호환되도록 업데이트가 필요할 수 있다.

v8::Handle 작별, v8::Local 환영

2014년, V8 팀은 로컬 핸들에 대해 v8::Handle 대신 v8::Local을 사용하도록 변경했다. Electron 5.0에는 v8::Handle이 완전히 제거된 V8 버전이 포함되어 있으며, 여전히 v8::Handle을 사용하는 네이티브 Node.js 애드온은 Electron 5.0에서 사용하기 전에 업데이트해야 한다.

필요한 코드 변경은 최소한이지만, 여전히 v8::Handle을 사용하는 모든 네이티브 Node 모듈은 Electron 5.0에서 빌드에 실패하며 수정이 필요하다. 다행히 Node.js v12도 이 V8 변경 사항을 포함할 예정이므로, v8::Handle을 사용하는 모듈은 Node의 새 버전과 호환되려면 어쨌든 업데이트해야 한다.

네이티브 애드온을 유지보수한다면 어떻게 도울 수 있을까?

Node.js용 네이티브 애드온을 유지보수하고 있다면, v8::Handle을 모두 v8::Local로 교체해야 한다. v8::Handle은 단순히 v8::Local의 별칭이었기 때문에, 이 특정 문제를 해결하기 위해 다른 변경 사항은 필요하지 않다.

또한 N-API를 살펴보는 것도 도움이 될 수 있다. N-API는 V8과 별도로 유지보수되며, Node.js 자체의 일부로 제공된다. 이 API는 네이티브 애드온이 기본 JavaScript 엔진의 변경 사항으로부터 격리될 수 있도록 설계되었다. 더 자세한 정보는 Node.js 웹사이트의 N-API 문서에서 확인할 수 있다.

도움! 내 앱에서 네이티브 애드온을 사용하는데 작동하지 않아요!

앱에서 Node.js용 네이티브 애드온을 사용 중이고, 이 문제로 인해 네이티브 애드온이 빌드되지 않는다면, 애드온 제작자에게 문의해 문제를 해결한 새 버전이 출시되었는지 확인해 보세요. 아직 해결된 버전이 없다면, 제작자에게 직접 문의하거나 Pull Request를 열어 수정을 제안하는 것이 가장 좋은 방법입니다.

Electron v5.0.0 Timeline

· 3 min read

Electron은 처음으로 v5.0.0부터 시작해 공개적인 릴리스 일정을 발표하게 되어 기쁘게 생각한다. 이는 장기적인 공개 타임라인을 갖추기 위한 첫 번째 단계다.


v4.0.0 안정 버전 릴리스 블로그 포스트에서 언급했듯이, 우리는 Chromium 릴리스와의 간격을 좁히기 위해 약 3개월마다 릴리스할 계획이다. Chromium은 매우 빠른 속도로 새 버전을 출시한다. 6주마다 새로운 버전이 나온다.

Electron과 Chromium의 진행 상황을 나란히 비교해 보자:

Electron과 Chromium 버전을 비교한 선 그래프

2018년 후반, 우리의 최우선 과제는 더 빠르게 릴리스하고 Chromium에 더 가까이 따라잡는 것이었다. 우리는 미리 정해진 타임라인을 고수함으로써 이 목표를 달성했다. Electron 3.0.0과 4.0.0은 각각 2-3개월 간격으로 릴리스되었다. 우리는 5.0.0 및 그 이후 버전에서도 이 속도를 유지할 수 있을 것이라고 낙관한다. 이제 주요 Electron 릴리스는 약 3개월마다 이루어지며, Chromium의 릴리스 속도와 거의 동일하다. Chromium 안정 버전보다 앞서는 것은 항상 우리의 목표이며, 이를 위해 노력하고 있다.

Node.jsChromium처럼 미래의 정확한 날짜를 약속하고 싶지만, 아직 그 단계에는 이르지 못했다. 우리는 미래에 장기적인 타임라인을 확보할 수 있을 것이라고 낙관한다.

이러한 점을 고려하여, 우리는 v5.0.0의 릴리스 일정을 공개적으로 게시하는 첫 번째 단계를 밟고 있다. 이는 여기에서 확인할 수 있다.

베타 버전 테스트와 안정화를 돕기 위해, 앱 피드백 프로그램에 참여해 주시길 바란다.

Electron 4.0.0

· 11 min read

Electron 팀은 Electron 4의 안정 버전 출시를 기쁘게 발표한다! electronjs.org에서 설치하거나 npm install electron@latest 명령어를 통해 npm으로 설치할 수 있다. 이번 릴리스는 다양한 업그레이드, 수정 사항, 그리고 새로운 기능으로 가득 차 있다. 여러분이 이를 활용해 어떤 것을 만들어낼지 기대된다. 이번 릴리스에 대한 자세한 내용은 계속 읽어보고, 탐색하면서 얻은 피드백을 공유해 주기 바란다!

새로운 기능

Electron의 기능 대부분은 Chromium, Node.js, V8이라는 핵심 컴포넌트에서 제공된다. 따라서 Electron 팀의 주요 목표는 이러한 프로젝트의 변화를 최대한 빠르게 반영해, Electron 앱을 개발하는 개발자들이 새로운 웹과 자바스크립트 기능을 활용할 수 있도록 하는 것이다. 이를 위해 Electron 4에서는 각 컴포넌트의 주요 버전이 업그레이드되었다. Electron v4.0.0은 Chromium 69.0.3497.106, Node 10.11.0, V8 6.9.427.24를 포함한다.

또한 Electron 4에는 Electron 전용 API의 변경 사항도 포함되어 있다. 아래에서 Electron 4의 주요 변경 사항을 확인할 수 있다. 전체 변경 사항은 Electron v4.0.0 릴리스 노트에서 확인할 수 있다.

remote 모듈 비활성화

보안상의 이유로 remote 모듈을 비활성화할 수 있다. BrowserWindowwebview 태그에 대해 이 모듈을 비활성화할 수 있다:

// BrowserWindow
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})

// webview 태그
<webview src="http://www.google.com/" enableremotemodule="false"></webview>

더 자세한 정보는 BrowserWindow<webview> 태그 문서를 참고한다.

remote.require() / remote.getGlobal() 요청 필터링

이 기능은 렌더러 프로세스나 webview에서 remote 모듈을 완전히 비활성화하지 않고도, remote.require를 통해 어떤 모듈을 요청할 수 있는지 추가적으로 제어하고 싶을 때 유용하다.

렌더러 프로세스에서 remote.require를 통해 모듈을 요청하면, app 모듈에서 remote-require 이벤트가 발생한다. 이 이벤트의 첫 번째 인자에서 event.preventDefault()를 호출하면 해당 모듈이 로드되는 것을 막을 수 있다. 요청이 발생한 WebContents 인스턴스는 두 번째 인자로 전달되며, 요청된 모듈의 이름은 세 번째 인자로 전달된다. 동일한 이벤트가 WebContents 인스턴스에서도 발생하지만, 이 경우에는 이벤트와 모듈 이름만 인자로 전달된다. 두 경우 모두 event.returnValue를 설정하여 커스텀 값을 반환할 수 있다.

// 모든 WebContents에서 `remote.require` 제어:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// 특정 WebContents 인스턴스에서 `remote.require` 제어:
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
},
);

비슷한 방식으로, remote.getGlobal(name)이 호출되면 remote-get-global 이벤트가 발생한다. 이 이벤트는 remote-require 이벤트와 동일하게 작동한다: preventDefault()를 호출하여 글로벌 값이 반환되는 것을 막을 수 있으며, event.returnValue를 설정하여 커스텀 값을 반환할 수 있다.

// 모든 WebContents에서 `remote.getGlobal` 제어:
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
// ...
},
);

// 특정 WebContents 인스턴스에서 `remote.getGlobal` 제어:
browserWin.webContents.on(
'remote-get-global',
function (event, requestedGlobalName) {
// ...
},
);

더 많은 정보는 다음 문서를 참고한다:

About 패널에 JavaScript로 접근하기

macOS에서는 app.showAboutPanel()을 호출해 프로그램적으로 About 패널을 표시할 수 있다. 이 기능은 {role: 'about'}로 생성한 메뉴 항목을 클릭하는 것과 동일하게 동작한다. 더 자세한 정보는 showAboutPanel 문서를 참고한다.

WebContents 백그라운드 스로틀링 제어

WebContents 인스턴스는 페이지가 백그라운드 상태일 때 타이머와 애니메이션의 스로틀링을 활성화하거나 비활성화할 수 있는 setBackgroundThrottling(allowed) 메서드를 제공한다.

let win = new BrowserWindow(...)
win.webContents.setBackgroundThrottling(enableBackgroundThrottling)

더 자세한 내용은 setBackgroundThrottling 문서를 참고한다.

주요 변경 사항

macOS 10.9 지원 중단

Chromium이 더 이상 macOS 10.9(OS X Mavericks)를 지원하지 않기 때문에, Electron 4.0 이상 버전도 이를 지원하지 않는다.

단일 인스턴스 잠금

이전에는 앱을 단일 인스턴스 애플리케이션으로 만들기 위해(앱의 한 인스턴스만 실행되도록 보장) app.makeSingleInstance() 메서드를 사용할 수 있었다. Electron 4.0부터는 app.requestSingleInstanceLock() 메서드를 대신 사용해야 한다. 이 메서드의 반환 값은 현재 애플리케이션 인스턴스가 잠금을 성공적으로 획득했는지 여부를 나타낸다. 잠금 획득에 실패했다면, 이미 다른 인스턴스가 잠금을 가지고 실행 중이라고 간주하고 즉시 종료하면 된다.

requestSingleInstanceLock() 사용 예제와 다양한 플랫폼에서의 세부 동작에 대한 정보는 app.requestSingleInstanceLock() 및 관련 메서드 문서second-instance 이벤트 문서를 참고한다.

win_delay_load_hook

윈도우용 네이티브 모듈을 빌드할 때, 모듈의 binding.gyp 파일에 있는 win_delay_load_hook 변수는 반드시 true로 설정해야 한다(기본값이 true임). 이 훅이 없으면 윈도우에서 네이티브 모듈을 로드할 수 없으며, Cannot find module과 같은 오류 메시지가 나타난다. 자세한 내용은 네이티브 모듈 가이드를 참고한다.

지원 중단 예정 기능

다음과 같은 주요 변경 사항은 Electron 5.0에서 적용될 예정이며, 따라서 Electron 4.0에서는 지원 중단(deprecated)으로 표시된다.

nativeWindowOpen으로 열린 윈도우에서 Node.js 통합 비활성화

Electron 5.0부터 nativeWindowOpen 옵션을 사용해 열린 자식 윈도우에서는 항상 Node.js 통합이 비활성화된다.

webPreferences 기본값

webPreferences 옵션을 설정하여 새로운 BrowserWindow를 생성할 때, 다음 webPreferences 옵션의 기본값은 아래에 나열된 새로운 기본값으로 대체되었다.

속성더 이상 사용되지 않는 기본값새로운 기본값
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagnodeIntegration 값이 설정된 경우 그 값을 사용, 그렇지 않으면 truefalse

참고: 현재 contextIsolation이 활성화된 상태에서 webview 태그가 작동하지 않는 알려진 버그 (#9736)가 있다. 최신 정보는 GitHub 이슈를 확인하자.

컨텍스트 격리, Node 통합, webview 태그에 대한 더 자세한 내용은 Electron 보안 문서를 참고하자.

Electron 4.0에서는 여전히 현재의 기본값을 사용하지만, 명시적인 값을 전달하지 않으면 더 이상 사용되지 않는다는 경고가 표시된다. Electron 5.0을 대비하려면 이러한 옵션에 명시적인 값을 사용해야 한다. 각 옵션에 대한 자세한 내용은 BrowserWindow 문서를 참고하자.

webContents.findInPage(text[, options])

medialCapitalAsWordStartwordStart 옵션은 상위 스트림에서 제거되었기 때문에 더 이상 사용되지 않는다.

앱 피드백 프로그램

Electron 3.0 개발 과정에서 도입한 앱 피드백 프로그램이 성공적이었기 때문에, 4.0 개발 과정에서도 이 프로그램을 계속 진행했다. Atlassian, Discord, MS Teams, OpenFin, Slack, Symphony, WhatsApp 및 다른 프로그램 멤버들에게 4.0 베타 기간 동안의 참여에 대해 깊은 감사를 표한다. 앱 피드백 프로그램에 대해 더 알아보고 향후 베타 테스트에 참여하려면 프로그램에 관한 블로그 포스트를 확인해보기 바란다.

다음 단계

단기적으로, 팀은 Chromium, Node, V8 등 Electron을 구성하는 주요 컴포넌트의 개발 속도를 따라잡는 데 계속 집중할 계획이다. 출시 일정에 대한 약속은 신중하게 하겠지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 새로운 주요 버전을 출시할 예정이다. Electron의 버전 관리에 대한 더 자세한 정보는 버전 관리 문서를 참고한다.

다가오는 Electron 버전에서 예정된 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서를 확인한다.

Electron 3.0.0

· 8 min read

Electron 팀은 Electron 3의 첫 번째 안정 버전을 출시하게 되어 기쁘게 생각합니다. 이제 electronjs.org에서 또는 npm install electron@latest 명령어를 통해 다운로드할 수 있습니다. 이번 버전은 다양한 업그레이드, 수정 사항, 그리고 새로운 기능으로 가득 차 있습니다. 여러분이 이 기능들을 활용해 무엇을 만들어 낼지 기대가 큽니다. 아래는 이번 릴리스에 대한 상세 정보입니다. 여러분의 피드백을 환영합니다.

릴리스 프로세스

v3.0.0 개발을 진행하면서, 우리는 점진적인 베타 릴리스에 대한 피드백 프로세스를 공식화하여 안정적인 릴리스 기준을 더 실질적으로 정의하려고 노력했다. 앱 피드백 프로그램 파트너들이 없었다면 v3.0.0은 불가능했을 것이다. 이 파트너들은 베타 주기 동안 초기 테스트와 피드백을 제공했다. Atlassian, Atom, Microsoft Teams, Oculus, OpenFin, Slack, Symphony, VS Code 및 다른 프로그램 멤버들의 노력에 감사한다. 앞으로의 베타 테스트에 참여하고 싶다면 info@electronjs.org로 메일을 보내주길 바란다.

변경 사항 / 새로운 기능

Electron의 핵심 툴체인에 대한 주요 업데이트가 이루어졌다. Chrome v66.0.3359.181, Node v10.2.0, 그리고 V8 v6.6.346.23 버전으로 업그레이드됐다.

  • [#12656] 기능 추가: app.isPackaged
  • [#12652] 기능 추가: app.whenReady()
  • [#13183] 기능 추가: process.getHeapStatistics()
  • [#12485] 기능 추가: win.moveTop()을 통해 윈도우의 z-order를 최상위로 이동
  • [#13110] 기능 추가: TextField 및 Button API
  • [#13068] 기능 추가: 동적 로깅 제어를 위한 netLog API
  • [#13539] 기능 추가: 샌드박스 렌더러에서 webview 사용 가능
  • [#14118] 기능 추가: fs.readSync가 대용량 파일에서도 작동
  • [#14031] 기능 추가: fs.realpathSync.nativefs.realpath.native를 사용할 수 있는 node fs 래퍼 추가

주요 API 변경 사항

  • [#12362] 기능: 메뉴 아이템 순서 제어 업데이트
  • [#13050] 리팩토링: 문서화된 사용 중단 API 제거
    • 자세한 내용은 문서 참고
  • [#12477] 리팩토링: did-get-response-detailsdid-get-redirect-request 이벤트 제거
  • [#12655] 기능: 드래그/드롭 시 기본적으로 네비게이션 비활성화
  • [#12993] 기능: electron npm 모듈 사용을 위해 Node v4.x 이상 필요
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] 리팩토링: NativeWindow
  • [#11968] 리팩토링: menu.popup()
  • [#8953] 기능: ipcRenderer.sendSync 결과 전송 시 더 이상 JSON 사용하지 않음
  • [#13039] 기능: URL 뒤에 오는 커맨드라인 인수 기본적으로 무시
  • [#12004] 리팩토링: api::Windowapi::BrowserWindow로 이름 변경
  • [#12679] 기능: 시각적 줌 기능 기본적으로 비활성화
  • [#12408] 리팩토링: 앱 커맨드 media-play_pausemedia-play-pause로 이름 변경

macOS

  • [#12093] feat: 워크스페이스 알림 지원 추가
  • [#12496] feat: 트레이 더블 클릭 이벤트 무시 기능 추가 (tray.setIgnoreDoubleClickEvents(ignore))
  • [#12281] feat: macOS에서 마우스 포워딩 기능 추가
  • [#12714] feat: 화면 잠금 / 잠금 해제 이벤트 추가

Windows

  • [#12879] 기능: DIP와 스크린 좌표 간 변환 기능 추가

주의: 이 버전을 실행한 후 이전 버전의 Electron으로 전환하려면 사용자 데이터 디렉터리를 삭제해야 한다. 그렇지 않으면 이전 버전이 충돌할 수 있다. 사용자 데이터 디렉터리는 console.log(app.getPath("userData"))를 실행하거나 문서를 참조하여 확인할 수 있다.

버그 수정

  • [#13397] 수정: fs.statSyncNoException에서 예외가 발생하는 문제 해결
  • [#13476, #13452] 수정: jquery를 사용하는 사이트 로드 시 크래시 문제 해결
  • [#14092] 수정: net::ClientSocketHandle 소멸자에서 발생하는 크래시 문제 해결
  • [#14453] 수정: 다음 틱(tick)이 아닌 즉시 포커스 변경 알림 전송

macOS

  • [#13220] 수정: <input file="type"> 파일 열기 대화상자에서 번들을 선택할 수 있는 문제 해결
  • [#12404] 수정: 비동기 대화상자 사용 시 메인 프로세스가 블로킹되는 문제 해결
  • [#12043] 수정: 컨텍스트 메뉴 클릭 콜백 문제 해결
  • [#12527] 수정: 터치바 아이템 재사용 시 이벤트 누수 문제 해결
  • [#12352] 수정: 트레이 제목 충돌 문제 해결
  • [#12327] 수정: 드래그 불가능한 영역 문제 해결
  • [#12809] 수정: 메뉴가 열려 있는 동안 업데이트되지 않도록 수정
  • [#13162] 수정: 트레이 아이콘 경계값이 음수를 허용하지 않는 문제 해결
  • [#13085] 수정: 트레이 제목이 강조될 때 색상이 반전되지 않는 문제 해결
  • [#12196] 수정: enable_run_as_node==false일 때 macOS 빌드 문제 해결
  • [#12157] 수정: 투명 효과가 적용된 프레임리스 윈도우에서 발생하는 추가 문제 해결
  • [#13326] 수정: app.removeAsDefaultProtocolClient 호출 후 macOS 프로토콜을 none으로 설정하도록 수정
  • [#13530] 수정: MAS 빌드에서 개인 API의 잘못된 사용 문제 해결
  • [#13517] 수정: tray.setContextMenu 충돌 문제 해결
  • [#14205] 수정: defaultId가 설정된 경우에도 ESC 키를 눌러 대화상자를 닫을 수 있도록 수정

Linux

  • [#12507] 수정: 오프스크린 윈도우에서 BrowserWindow.focus() 문제 해결

기타 참고 사항

  • PDF 뷰어는 현재 작동하지 않지만, 곧 다시 정상적으로 사용할 수 있도록 작업 중이다.
  • TextFieldButton API는 실험적 기능이므로 기본적으로 비활성화되어 있다.
    • enable_view_api 빌드 플래그를 사용해 활성화할 수 있다.

다음 단계

Electron 팀은 Chromium, Node, V8의 개발 주기와 궁극적으로 동일한 속도를 유지하기 위해 보다 빠르고 원활한 업그레이드 프로세스를 정의하는 작업을 계속 진행하고 있다.

Electron 2.0.0

· 10 min read

4개월 이상의 개발 기간과 8번의 베타 릴리스를 거쳤으며, 전 세계 여러 앱의 단계적 롤아웃을 통해 테스트를 마친 후, 이제 Electron 2.0.0이 electronjs.org에서 공식 출시되었다.

릴리스 프로세스

2.0.0 버전부터 Electron의 릴리스는 시맨틱 버저닝을 따르게 된다. 이는 주 버전이 더 자주 올라가며, 일반적으로 Chromium의 주요 업데이트를 포함한다는 의미다. 패치 릴리스는 높은 우선순위의 버그 수정만 포함하기 때문에 더 안정적이어야 한다.

Electron 2.0.0은 또한 주요 릴리스 전에 Electron을 안정화하는 방식의 개선을 의미한다. 여러 대규모 Electron 앱이 2.0.0 베타 버전을 단계적 롤아웃에 포함시켰고, 이는 Electron이 베타 시리즈를 위해 가진 최고의 피드백 루프를 제공했다.

변경 사항 / 새로운 기능

  • Electron의 주요 도구 체인에 대한 주요 업데이트: Chrome 61, Node 8.9.3, V8 6.1.534.41, Linux용 GTK+ 3, 업데이트된 맞춤법 검사기, 그리고 Squirrel이 포함된다.
  • MacOS에서 인앱 결제 기능이 지원된다. #11292
  • 파일 로드를 위한 새로운 API가 추가되었다. #11565
  • 윈도우 활성화/비활성화를 위한 새로운 API가 추가되었다. #11832
  • app.setLocale()이라는 새로운 API가 추가되었다. #11469
  • IPC 메시지 로깅을 위한 새로운 지원이 추가되었다. #11880
  • 새로운 메뉴 이벤트가 추가되었다. #11754
  • powerMonitorshutdown 이벤트가 추가되었다. #11417
  • 여러 BrowserWindows를 단일 프로세스로 모으기 위한 affinity 옵션이 추가되었다. #11501
  • saveDialog에서 사용 가능한 확장자를 나열할 수 있는 기능이 추가되었다. #11873
  • 추가 알림 액션에 대한 지원이 추가되었다. #11647
  • macOS 알림 닫기 버튼의 제목을 설정할 수 있는 기능이 추가되었다. #11654
  • menu.popup(window, callback)에 대한 조건부 기능이 추가되었다.
  • 터치바 아이템의 메모리 사용이 개선되었다. #12527
  • 보안 권장 사항 체크리스트가 개선되었다.
  • 앱 범위 보안 스코프 북마크가 추가되었다. #11711
  • 렌더러 프로세스에서 임의의 인자를 설정할 수 있는 기능이 추가되었다. #11850
  • 포맷 선택기를 위한 액세서리 뷰가 추가되었다. #11873
  • 네트워크 대리자 경쟁 조건이 수정되었다. #12053
  • Linux에서 mips64el 아키텍처 지원이 중단되었다. Electron은 C++14 도구 체인이 필요하지만, 해당 아키텍처에서는 이 도구 체인이 제공되지 않았다. 향후 다시 지원할 계획이다.

주요 API 변경 사항

  • 더 이상 사용되지 않는 API를 제거했다. 자세한 내용은 deprecated APIs를 참고한다. 변경된 항목은 다음과 같다:
    • menu.popup 시그니처를 변경했다. #11968
    • 더 이상 사용되지 않는 crashReporter.setExtraParameter를 제거했다. #11972
    • 더 이상 사용되지 않는 webContents.setZoomLevelLimitswebFrame.setZoomLevelLimits를 제거했다. #11974
    • 더 이상 사용되지 않는 clipboard 메서드를 제거했다. #11973
    • tray.setHighlightMode의 불리언 파라미터 지원을 제거했다. #11981

버그 수정

  • webContents.isOffscreen()이 항상 사용 가능하도록 수정. #12531
  • DevTools가 독립 창으로 떠 있고 포커스되었을 때 BrowserWindow.getFocusedWindow()가 정상 작동하도록 수정. #12554
  • 사전 로드(preload) 경로에 특수 문자가 포함된 경우 샌드박스 렌더에서 사전 로드가 로드되지 않는 문제 해결. #12643
  • 문서에 따라 allowRunningInsecureContent의 기본값을 올바르게 수정. #12629
  • nativeImage에서 투명도 문제 해결. #12683
  • Menu.buildFromTemplate 관련 문제 해결. #12703
  • menu.popup 옵션이 객체인지 확인하도록 수정. #12330
  • 새로운 프로세스 생성과 컨텍스트 해제 사이의 경쟁 상태 제거. #12361
  • BrowserView를 변경할 때 드래그 가능 영역 업데이트. #12370
  • 포커스 시 메뉴바 토글 Alt 키 감지 문제 해결. #12235
  • 웹뷰에서 잘못된 경고 메시지 출력 문제 해결. #12236
  • 부모 윈도우에서 'show' 옵션 상속 문제 해결. #122444
  • getLastCrashReport()이 실제로 마지막 크래시 리포트를 반환하도록 보장. #12255
  • 네트워크 공유 경로에서 require 사용 문제 해결. #12287
  • 컨텍스트 메뉴 클릭 콜백 문제 해결. #12170
  • 팝업 메뉴 위치 문제 해결. #12181
  • libuv 루프 정리 기능 개선. #11465
  • 투명 색상에 대한 hexColorDWORDToRGBA 문제 해결. #11557
  • getWebPreferences API 사용 시 널 포인터 역참조 문제 해결. #12245
  • 메뉴 대리자에서 순환 참조 문제 해결. #11967
  • net.request의 프로토콜 필터링 문제 해결. #11657
  • WebFrame.setVisualZoomLevelLimits가 사용자 에이전트 스케일 제약 조건을 설정하도록 수정. #12510
  • 웹뷰 옵션에 적절한 기본값 설정. #12292
  • 비브란시(vibrancy) 지원 개선. #12157 #12171 #11886
  • 단일 픽스처에서 타이밍 문제 해결.
  • NotifierSupportsActions()에서 깨진 프로덕션 캐시 문제 해결.
  • MenuItem 역할을 camelCase와 호환되도록 수정. #11532
  • 터치 바 업데이트 기능 개선. #11812, #11761.
  • 불필요한 메뉴 구분자 제거. #11827
  • 블루투스 선택기 버그 해결. #11399 닫힘.
  • macOS 전체 화면 토글 메뉴 항목 레이블 수정. #11633
  • 윈도우 비활성화 시 툴팁 숨김 기능 개선. #11644
  • 더 이상 사용되지 않는 웹뷰 메서드 마이그레이션. #11798
  • BrowserView에서 열린 윈도우 닫기 문제 해결. #11799
  • 블루투스 선택기 버그 해결. #11492
  • app.getFileIcon API에서 작업 스케줄러 사용하도록 업데이트. #11595
  • 오프스크린 렌더링 시에도 console-message 이벤트가 발생하도록 수정. #11921
  • WebContents.downloadURL을 사용한 커스텀 프로토콜 다운로드 문제 해결. #11804
  • DevTools가 분리될 때 투명 윈도우가 투명도를 잃는 문제 해결. #11956
  • Electron 앱이 재시작 또는 종료를 취소하는 문제 해결. #11625

macOS

  • 터치바 아이템 재사용 시 발생하던 이벤트 누수 문제를 해결했다. #12624
  • 다크 모드에서 트레이 하이라이트가 제대로 표시되지 않던 문제를 수정했다. #12398
  • 비동기 다이얼로그가 메인 프로세스를 블로킹하던 문제를 해결했다. #12407
  • setTitle 트레이 크래시 문제를 수정했다. #12356
  • 독 메뉴 설정 시 발생하던 크래시 문제를 해결했다. #12087

Linux

  • 더 나은 Linux 데스크톱 알림 기능. #12229 #12216 #11965 #11980
  • 메뉴에 대한 더 나은 GTK+ 테마 지원. #12331
  • Linux에서 정상적으로 종료. #12139
  • 트레이 아이콘의 기본 툴팁으로 앱 이름 사용. #12393

Windows

  • Visual Studio 2017 지원이 추가되었다. #11656
  • 시스템 크래시 핸들러로 예외를 전달하는 문제가 수정되었다. #12259
  • 최소화된 윈도우에서 툴팁이 숨겨지는 문제가 해결되었다. #11644
  • desktopCapturer가 올바른 화면을 캡처하도록 수정되었다. #11664
  • 투명도와 함께 disableHardwareAcceleration이 동작하도록 수정되었다. #11704

다음은 무엇을 준비하고 있나

Electron 팀은 Chromium, Node, v8의 최신 버전을 지원하기 위해 열심히 작업 중이다. 곧 3.0.0-beta.1 버전을 기대해도 좋다!

Electron 2.0 and Beyond - Semantic Versioning

· 3 min read

Electron의 새로운 주요 버전이 개발 중이며, 버전 관리 전략에도 몇 가지 변화가 생긴다. 2.0.0 버전부터 Electron은 시맨틱 버저닝(Semantic Versioning)을 엄격히 준수할 예정이다.


이번 변경으로 주요 버전 업데이트가 더 자주 발생할 것이며, 대부분 Chromium의 주요 업데이트를 포함할 것이다. 패치 릴리스도 더 안정적으로 제공될 예정인데, 이제는 새로운 기능 없이 버그 수정만 포함되기 때문이다.

주요 버전 업데이트 사항

  • Chromium 버전 업데이트
  • Node.js 주요 버전 업데이트
  • Electron의 호환성을 깨는 API 변경

부 버전 업데이트 사항

  • Node.js 부 버전 업데이트
  • Electron의 호환성을 유지하는 API 변경

패치 버전 업데이트 사항

  • Node.js 패치 버전 업데이트
  • Chromium의 버그 수정 패치
  • Electron의 버그 수정

이제 Electron의 시맨틱 버저닝 범위가 더 명확해졌기 때문에, npm의 기본 --save-dev 플래그를 사용해 Electron을 설치할 것을 권장한다. 이렇게 하면 버전 앞에 ^가 붙어 부 버전과 패치 업데이트를 안전하게 따라갈 수 있다:

npm install --save-dev electron

버그 수정만 원하는 개발자는 물결표(~)를 사용해 ~2.0.0과 같이 버전을 지정하면 된다. 이렇게 하면 새로운 기능이 추가되지 않고 안정성을 높이는 수정만 적용된다.

더 자세한 내용은 electronjs.org/docs/tutorial/electron-versioning에서 확인할 수 있다.

Electron 1.0

· 7 min read

지난 2년 동안 Electron은 HTML, CSS, 자바스크립트를 사용해 크로스 플랫폼 데스크톱 애플리케이션을 개발할 수 있게 도와왔다. 이제 우리는 프레임워크와 이를 만들어낸 커뮤니티를 위한 중요한 이정표를 공유하게 되어 기쁘게 생각한다. Electron 1.0이 electronjs.org에서 출시되었다.


Electron 1.0

Electron 1.0은 API의 안정성과 성숙도 측면에서 중요한 이정표를 의미한다. 이번 릴리스를 통해 Windows, Mac, Linux에서 진정한 네이티브 애플리케이션처럼 동작하고 느껴지는 앱을 구축할 수 있다. 새로운 문서, 도구, 그리고 Electron API를 안내하는 새로운 앱 덕분에 Electron 앱을 개발하는 것이 이전보다 훨씬 쉬워졌다.

첫 번째 Electron 앱을 만들 준비가 되었다면, 시작을 도와줄 빠른 시작 가이드를 참고하길 바란다.

여러분이 Electron으로 무엇을 만들어낼지 기대가 된다.

Electron의 여정

우리는 약 2년 전 Atom을 출시하며 Electron을 공개했다. 당시 Atom Shell로 알려졌던 Electron은 Atom을 구축한 프레임워크였다. Atom의 초기 버전을 출시하기 위해 노력하던 시절, Atom은 Electron이 제공하는 기능과 기능성의 주요 동력이었다.

이제 Electron은 이메일, 채팅, Git 앱부터 SQL 분석 도구, 토렌트 클라이언트, 로봇에 이르기까지 다양한 분야의 개발자와 기업들로 구성된 커뮤니티가 이끌고 있다.

지난 2년 동안 우리는 기업과 오픈 소스 프로젝트들이 Electron을 자신들의 앱 기반으로 선택하는 모습을 목격했다. 지난 한 해 동안만 해도 Electron은 120만 번 이상 다운로드되었다. Electron 앱 둘러보기에서 몇 가지 멋진 Electron 앱을 확인하고, 아직 등록되지 않았다면 여러분의 앱을 추가해보자.

Electron 다운로드 수

Electron API 데모

Electron 1.0 릴리스와 함께, Electron API를 탐색하고 Electron 앱을 네이티브처럼 만드는 방법을 배우는 데 도움이 되는 새로운 앱을 공개한다. Electron API 데모 앱은 앱을 시작하는 데 도움이 되는 코드 스니펫과 Electron API를 효과적으로 사용하는 팁을 포함하고 있다.

Electron API 데모

Devtron

Electron 앱을 디버깅하는 데 도움을 주는 새로운 확장 기능을 추가했다. DevtronChrome 개발자 도구의 오픈소스 확장 기능으로, Electron 앱을 검사하고 디버깅하며 문제를 해결하는 데 유용하다.

Devtron

주요 기능

  • 의존성 그래프 시각화: 앱의 내부 및 외부 라이브러리 의존성을 메인 프로세스와 렌더러 프로세스에서 모두 시각적으로 확인할 수 있다.

  • IPC 모니터: 앱 내 프로세스 간에 주고받는 메시지를 추적하고 표시한다.

  • 이벤트 검사기: 윈도우, 앱, 프로세스 등 코어 Electron API에 등록된 이벤트와 리스너를 확인할 수 있다.

  • 앱 린터: 앱에서 흔히 발생하는 실수와 누락된 기능을 점검한다.

Spectron

마지막으로, Electron 앱을 위한 통합 테스트 프레임워크인 Spectron의 새 버전을 출시한다.

Spectron

Spectron 3.0은 Electron API 전체를 포괄적으로 지원한다. 이를 통해 다양한 시나리오와 환경에서 애플리케이션의 동작을 검증하는 테스트를 더 빠르게 작성할 수 있다. Spectron은 ChromeDriverWebDriverIO를 기반으로 하므로, 페이지 네비게이션, 사용자 입력, 자바스크립트 실행을 위한 완전한 API도 제공한다.

커뮤니티

Electron 1.0은 수백 명의 개발자들이 함께 노력한 결과물이다. 코어 프레임워크 외에도 Electron 앱을 더 쉽게 빌드, 패키징, 배포할 수 있도록 도와주는 수많은 라이브러리와 도구들이 공개되었다.

이제 커뮤니티 페이지에서 다양한 Electron 도구, 앱, 라이브러리, 프레임워크를 확인할 수 있다. 또한 ElectronElectron Userland 조직에서 이 멋진 프로젝트들을 살펴볼 수 있다.

Electron이 처음이라면? Electron 1.0 소개 영상을 시청해 보자:

Electron 0.37의 새로운 기능

· 7 min read

Electron 0.37이 최근 릴리스되었으며, Chrome 47에서 Chrome 49로의 주요 업그레이드와 여러 새로운 코어 API가 포함되었다. 이번 최신 릴리스는 Chrome 48Chrome 49에서 제공된 모든 새로운 기능을 가져온다. 여기에는 CSS 커스텀 프로퍼티, ES6 지원 강화, KeyboardEvent 개선, Promise 개선, 그리고 이제 Electron 앱에서 사용할 수 있는 다양한 새로운 기능이 포함된다.

새로운 기능

CSS 커스텀 속성

Sass나 Less 같은 전처리 언어를 사용해 본 적이 있다면, 색상 스키마나 레이아웃 같은 재사용 가능한 값을 정의할 수 있는 변수에 익숙할 것이다. 변수는 스타일시트를 DRY(Don't Repeat Yourself)하게 유지하고 더 유지보수하기 쉽게 만든다.

CSS 커스텀 속성은 전처리 변수와 비슷하게 재사용 가능하지만, 더 강력하고 유연한 독특한 특징이 있다: 자바스크립트로 조작할 수 있다. 이 미묘하지만 강력한 기능은 CSS의 하드웨어 가속을 활용하면서도 시각적 인터페이스를 동적으로 변경할 수 있게 해준다. 또한 프론트엔드 코드와 스타일시트 간의 코드 중복을 줄이는 데도 도움이 된다.

CSS 커스텀 속성에 대한 더 자세한 정보는 MDN 문서Google Chrome 데모를 참고하면 된다.

CSS 변수 활용 예제

앱에서 실시간으로 조정할 수 있는 간단한 변수 예제를 살펴보자.

:root {
--awesome-color: #a5ecfa;
}

body {
background-color: var(--awesome-color);
}

변수 값은 자바스크립트에서 직접 가져오거나 변경할 수 있다:

// 변수 값 '#A5ECFA'를 가져옴
let color = window
.getComputedStyle(document.body)
.getPropertyValue('--awesome-color');

// 변수 값을 'orange'로 설정
document.body.style.setProperty('--awesome-color', 'orange');

변수 값은 개발 도구의 스타일 섹션에서도 편집할 수 있어 빠르게 피드백을 받고 조정할 수 있다:

스타일 탭의 CSS 속성

KeyboardEvent.code 속성

Chrome 48에서는 KeyboardEvent 이벤트에 새로운 code 속성을 추가했다. 이 속성은 운영체제의 키보드 레이아웃과 상관없이 물리적으로 눌린 키를 나타낸다. 이를 통해 여러 기기와 설정에서 일관된 커스텀 키보드 단축키를 구현할 수 있다.

window.addEventListener('keydown', function (event) {
console.log(`${event.code} was pressed.`);
});

이 예제를 통해 실제 동작을 확인할 수 있다.

Promise 거부 이벤트

Chrome 49에서는 거부된 Promise가 처리되지 않았을 때 이를 알려주는 두 가지 새로운 window 이벤트를 추가했다.

window.addEventListener('unhandledrejection', function (event) {
console.log('거부된 Promise가 처리되지 않았습니다', event.promise, event.reason);
});

window.addEventListener('rejectionhandled', function (event) {
console.log('거부된 Promise가 처리되었습니다', event.promise, event.reason);
});

실제 동작을 확인하려면 이 예제를 참고하라.

V8 엔진의 ES2015 업데이트

현재 Electron에 포함된 V8 버전은 ES2015 기능의 91%를 지원한다. 플래그나 사전 컴파일러 없이 바로 사용할 수 있는 몇 가지 흥미로운 기능을 소개한다:

기본 매개변수

function multiply(x, y = 1) {
return x * y;
}

multiply(5); // 5

구조 분해 할당

Chrome 49부터 구조 분해 할당이 추가되어 변수와 함수 인자를 더 쉽게 할당할 수 있게 되었다.

이 기능 덕분에 Electron에서의 요구 사항을 더 깔끔하고 간결하게 할당할 수 있게 되었다:

브라우저 프로세스 요구 사항
const { app, BrowserWindow, Menu } = require('electron');
렌더러 프로세스 요구 사항
const { dialog, Tray } = require('electron').remote;
다른 예제들
// 배열 구조 분해 할당에서 두 번째 요소 건너뛰기
const [first, , last] = findAll();

// 함수 매개변수 구조 분해 할당
function whois({ displayName: displayName, fullName: { firstName: name } }) {
console.log(`${displayName} is ${name}`);
}

let user = {
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe',
},
};
whois(user); // "jdoe is John"

// 객체 구조 분해 할당
let { name, avatar } = getUser();

새로운 Electron API

아래는 몇 가지 새로운 Electron API다. Electron 릴리스 노트에서 각 API에 대한 자세한 내용을 확인할 수 있다.

BrowserWindowshowhide 이벤트

이 이벤트들은 윈도우가 보여지거나 숨겨질 때 발생한다.

const { BrowserWindow } = require('electron');

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('show', function () {
console.log('Window was shown');
});
window.on('hide', function () {
console.log('Window was hidden');
});

appplatform-theme-changed 이벤트 (OS X)

이 이벤트는 시스템의 다크 모드 테마가 전환될 때 발생한다.

const { app } = require('electron');

app.on('platform-theme-changed', function () {
console.log(`Platform theme changed. In dark mode? ${app.isDarkMode()}`);
});

app.isDarkMode() for OS X

이 메서드는 시스템이 다크 모드 상태일 때 true를 반환하고, 그렇지 않으면 false를 반환한다.

OS Xscroll-touch-beginscroll-touch-end 이벤트를 BrowserWindow에 추가

이 이벤트들은 스크롤 휠 이벤트 단계가 시작되거나 끝날 때 발생한다.

const { BrowserWindow } = require('electron');

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('scroll-touch-begin', function () {
console.log('Scroll touch started');
});
window.on('scroll-touch-end', function () {
console.log('Scroll touch ended');
});