†でおきしブログ†

ウナギ食べたいヽ(•̀ω•́ )ゝ✧

electron-packagerでビルド対象のソースパスにpackage.jsonとnode_modulesが無いとエラーになる

アプリを起動すると、『cannot find module ***』ってエラーが発生する。
どうもpackage.jsonと同じ場所にnode_modulesフォルダが無いと、アプリに必要なファイルが含まれないようだ。


この問題はpackage.jsonの『dependenciesに必要なパッケージが記載されていないといけない』とは別次元の問題。


そもそもビルド対象のソースパスにpackage.jsonとnode_modulesは一緒にあるのが普通だと思うのだけれど、開発環境(ディレクトリ構成)の作り方によってはそのような事が起きてしまう。

☆解決策

★解決案1(webpackを使う)
  1. webpackでJavaScriptモジュールを固める(例:bundle.js)
  2. bundle.jsと同じ場所にpackage.jsonを置く(例:./dist)
  3. package.jsonのmainの参照先を変更する
    • "main": "bundle.js"
  4. electron-packagerで./distをsourcepathに指定して実行する

webpackありがとう!!
と、思ったけれど、これだけレンダラー(*.html)との連携が取れない。

ダメだぁ

webpackで頑張るか、*.html要らずな構成ならこれでイケるかもしれない。

★解決案2(力技)

ソースパスにpackage.jsonとnode_modulesを一緒に配置する。

ソースパスはパッケージ作成用のテンポラリフォルダを作って、そこにコピーすると良いと思う。
package.jsonのscriptsにコピーしてビルドするコマンドを登録しておく。
コピーはcpxを使った。

これならいけました。