C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

electron と node_modules と client-side library と electron-builder と symlink と .asar についての Windows での挙動についてのメモ

状況

  • Electron アプリを作っています。
  • yarn/npm で client-side 向けの library X (仮) を追加しています。
  • X は開発環境では yarn/npm により node_modules/X ディレクトリーに取り込まれています。
  • Electron アプリの client-side の static なファイル資源は public/lib/ ディレクトリーに配置したいお気持ちです。
  • 主なデプロイターゲットと開発環境は Windows です。

ここで、

となる場合に symlink を使うとどうなるのか、です。

symlink を使うとどうなるのか?

# zsh/arch/WSL2
# ; cmd 使いなら mklink -D を使い、 powershell 使いなら New-Item -ItemType SymbolicLink を使います。たぶん。
cd public/lib
ln -s ../../node_modules/X
file X
X: symbolic link to ../node_modules/X

直接 electron . → symlink もそのまま動作🙆‍♀️

  • 直接 electron . 的にアプリを起動する場合は symlink で作成したファイルまたはディレクトリーはElectronを介したアプリ client-side からの参照に対して通常のファイルと変わりない挙動を示します。たぶん、 NTFS と OS のファイルシステムに依存した挙動と思いますが、Windows開発環境で困る事は怒ら無いようです。

electron-builder → copy が .asar に入って動作🙆‍♀️

  • electron-builder でリリース用のパッケージを作成する場合は symlink で作成したファイルまたはディレクトリーは copy が .asar に入り、できあがった .exe での Electron を介したアプリ client-side からの参照に対して結果的には symlink を辿った先にあったファイルそのものと変わりない挙動を示します。

↑ここはこのメモの本質的な挙動確認の対象部分です。結果としてこの目的においては理想的な期待動作となる事がわかり安心が1つ増えました。 electron-builder を使うと symlink が相対パスを記したテキストファイルに化けてしまうとか何かしら問題が起こるのではないかと疑い、そのような挙動を示した場合には symlink で手軽に済ませるのはやめようと考えながらの確認でしたが、珍しく嬉しい誤算の期待動作に遭遇しました。のメモです。