ElectronアプリはchromiumをベースにしていてHello worldするだけでも100M近くのファイルサイズになってしまう. 油断しているとすぐに200Mとかになってしまうので,ファイルサイズをできるだけ小さくすることを普段から心がける必要がある.
心がけた結果のPRがこれ
今までは,
$ NODE_ENV=production ./node_modules/.bin/electron-packager . nicomentron --platform=darwin --arch=x64 --out=packages --overwrite
こうビルドしていた.
こうすると,もちろんだがカレントディレクトリのファイル全てがアプリ内に含まれてしまい,node_modules
や当たり前に不必要なファイルが数多く含まれてしまいこのようになる.
最適化できているかは,アプリ内のここのディレクトリを見れば確認することができる.(asarで圧縮してしまうともちろん見れない
せっかくビルドした結果をapp以下に吐いているのに無関係に全ファイルアプリ内に入ってしまっていることがわかる. 必要なのはビルド結果のapp以下のファイルとpackage.json,その他必要なファイルだけだ.
不必要なファイルで気をつけるべきなのは,自分のアプリで言うとフラッシュプラグインがあり,今後マルチプラットフォーム対応するにあたって各プラットフォームごとのフラッシュプラグインを用意するので,このままだと全てのフラッシュプラグインが入ってしまう
結果以下のようにapp以下をパッケージングするように変更した.パッケージングするにはpackage.json
が必要である.自分のアプリはexternals
でネイティブモジュールを使用しているので,仕方なくnpm install
して,electron-rebuild
も実行するようにしている.もちろん,本来であればnode_modules
も必要ない
$ cp package.json ./app && cp -r plugins ./app && cd ./app && rm -rf node_modules && npm install --production && ../node_modules/.bin/electron-rebuild -m . sqlite3 keytar $ NODE_ENV=production ./node_modules/.bin/electron-packager ./app nicomentron --platform=darwin --arch=x64 --out=packages --overwrite --asar
結果 良さそう