要約
- ×
const app = require('app');
- ○
const app = require('electron').app;
疑問
const app = require('app');
const BrowserWindow = require('browser-window');
const shell = require('electron').shell;
const Menu = require('menu');
const ipcMain = require('electron').ipcMain;
コードを整理していると、変なことに気が付いた。electron/docsに紹介されているようなモジュールについて、electron
モジュールから引っ張ってきているのと直接呼び出しているのと2つの扱いがあるが、それぞれ入れ替えても動く。
require('electron').ipcMain
→ require('ipc-main')
のように CamelCase と chain-case の違いはあれどもだいたい対応するモジュールがあるようだ。でも、shell を require('shell');
で呼び出すと、全てのウィンドウが閉じたらアプリが終了するようにしていた部分が動かなかったりと、少々違いはある。一体どうなっているのか。
解答
Release electron v0.35.0で Add electron module which includes all public APIs.
と書かれている。この統合が行われた背景は、Issue #387にある通り、electron のビルトインモジュールと一般モジュールが衝突する面倒が生じていたため。electron のビルトインモジュールは明示的に呼び出す仕様に整理された。
よって以下のように整理した。
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const shell = electron.shell;
const Menu = electron.Menu;
const ipcMain = electron.ipcMain;
参考:
- electron/synopsis.md 古いスタイルの読み込みを強制的に無効にする方法なども紹介されている。