今更Electron
マルチプラットフォームなら使える!と思って勉強する。
前提
nodeJsインストール済。
インストール
mkdir electron-test && cd $_
npm init -y
# --save-dev オプションが何を意味するかわからんけど、これじゃないとダメ
# npm install electron-prebuilt --save-dev ← 1.4.13
npm install -D electron@latest --save-dev ← 5.0.0(最新)
または(yarn導入してたら)
yarn add -D electron@latest --save-dev ← 5.0.0(最新)
# 実行はこれ。よくわかんないけど
./node_modules/electron/cli.js
・リンク張っておく
ln -s ./node_modules/electron/cli.js electron
※electron v5.0.0でなんかバグ?
---
FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now.
---
ってでる。
sudo chown root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox
ってやるといい。
electron-packagerインストール
### install electron-packager.
sudo npm i electron-packager -g
## なんかwin32なアプリの為には、wine32が必要らしい.
https://github.com/electron-userland/electron-packager/issues/654
## ↓の通りにwineをbuild & installする (かなり時間かかるよ)
https://ameblo.jp/kousakusya/entry-12333298836.html
asar実行
# asar pack {アプリケーションディレクトリ} {出力ファイル名}.asar
asar pack ./sample ./sample.asar
electron-packager実行
### make package.
electron-packager ./sample sample --platform=win32 --arch=x64 --electronVersion=5.0.0 --asar.unpack **/img/** --asar
・区分値
platform (all, linux, win32, darwin)
arch (all, ia32, x64)
electronVersion (Electron version)
NSIS
Windowsインストーラとして、NSISを使う。
面倒だからWindows側にいれて、そこからインストーラ作成。
https://sourceforge.net/projects/nsis/files/NSIS%203/3.04/nsis-3.04-setup.exe/download?use_mirror=jaist&download=
から
nsis-3.04-setup.exe
をgetしてインストール。
あとは、適当に"hoge.nsi"みたいなの作って
右クリックコンパイル。
細かい設定は割愛。
結論
まだわからんけど、Windows用バイナリはwine頼りってことはわかった。
electron-packagerがx64を非サポートで、wine32は、ソースからビルドするしかなく、buildで異様に時間がかかる。
後、自分の環境(CentOS7.6 + GNome)だと、ウィンドウの透明化はできなかった。
Windowsなら簡単にできた。
※未解決事項
・Windowsバイナリのアイコン指定ができない!
# なんでかわからないけど
rcedit.exe failed with exit code 1. Reserved header is not 0 or image type is not icon for 'i'
Fatal error: Unable to set icon
# がでて、electron-packagerのbuildに失敗する。
# electron-builderはよくわからないけどエラーがでる為、両方諦めた。