Electron-Builder (Vue-CLI-Plugin Electron Builder) エラーもないのにアプリが起動すらしなくなる問題

Table of Contents

クソ悩んだ

https://drroot.page/wp/?p=201
この記事は、上記記事の続きだ。

概要と症状

2021年1月末現在、こんな感じで再現できる。

vue-cli-pluginでプロジェクト作成

vue add electron-builderコマンドでElectron-builderブチ込む

yarnなりnpmなりでserialportを入れる(というか、ネイティブ向けパッケージを入れる)

electron:serveすると普通に動く

electron:buildしたexeを実行しても即座に終了してなんも起きない

気づいたらelectron:serveも即終了するようになってる

エラーコードも何も起きず、正常終了するフリして即落ちするからマジで何かと思った。

原因

electron-builderが、buildコマンド時にネイティブパッケージを変なふうにリビルドするのが原因
どうもこの時おかしなリビルドをするらしく、起動後即座にbindings(ネイティブバイナリと橋渡しするやつ)を掴み損なって落ちるらしい。
これもビルド時のログを5千億回くらい読み直してようやく理解できたんだが、どうも「electron-rebuild -f -w serialport」すべきところを「npm-rebuild」してるらしく…
もしかしたら、electronにバンドルするnodeではなく、開発で使ってるnpm向けにビルドしちゃってるんじゃないだろうか。

直し方

electron-builderに、ビルド時の余計なネイティブパッケのリビルドやめろと伝えれば良い。
ドキュメントによれば、npmRebuildをfalseにすればいいとある。
https://www.electron.build/configuration/configuration#configuration

electron+vue構成の場合、プロジェクトのルートにvue.config.jsを作り、そこにbuilderへ渡すオプションを書ける。
https://nklayman.github.io/vue-cli-plugin-electron-builder/guide/configuration.html#configuring-electron-builder

今回はserialportを使っているので、こいつをビルドから除外するコードも含めると(前回記事参照)こんな感じだ。

module.exports = {
  pluginOptions: {
    electronBuilder: {
      externals: ["serialport"],
      builderOptions: {
        npmRebuild: false
      }
    }
  }
};

で、もしこの症状に陥った場合、既にBuilderがゴミをリビルドしてしまっているので、もっかい手動でネイティブバイナリのリビルドをする必要がある。
即ち、「electron-rebuild -f -w serialport」を叩き直せばいい…このあたりは前回記事の内容を参照だ。

ちなみに

yarnを使ってるだけでも、何かしらaddした時この余計なリビルド処理が発生しやがるぞ。どうしろってんだ。
今の所気付き次第Rebuildする以外に思いつかんね。

カテゴリー: IT パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です