カテゴリー
【nodejs活用】nexeでポータブルなExpress.jsサーバーを手軽に持ち歩く〜Windows編
※ 当ページには【広告/PR】を含む場合があります。
2022/09/16
2022/09/17

前の回では、Nexeを利用して
Nexeはクロスプラットホームのnodejsアプリの実行形式バイナリを作成できるのが売りですが、Windowsがターゲットの場合、動作させるまでには少しコツが入ります。
今回はNexeアプリをWindowsで動かす方法を取り上げていきます。
Windows向けにnexeアプリビルドする
Nexe化するソースコードは、
またここでは、Nexeアプリをnodejs開発環境を整えたLinuxパソコンでビルドさせることにします。
Typescriptビルド後に作成できたソースコード・
dist/index.js
最新のビルドターゲットは
ちなみにビルドターゲットを省略すると現在のシステム環境から自動で読み取ってきてくれる仕組みですが、完全に合致したバージョンのファイルが無いとエラーが発生します。
そう都合良くインストールしているnodejsのバージョンと、リストアップされているNexeのプリビルドファイルのバージョンが一致していることが無いので、極力ビルドターゲットは手動で指定することをおすすめします。
今回は、64bitのWindowsOSで動作させることを念頭においているので、手元のnode v14相当でビルドしたNexeアプリを動かしたい場合には、以下のように--targetオプションで一番近しいバージョンのファイルで指定してみます。
$ node --version
v14.19.0
$ nexe dist/index.js --target=windows-x64-14.15.3
ビルドが正常に通ると、
index.exe
あとはこの実行形式ファイルを、ストレージなどに保存させてから、動作させたいWindowsマシーンへ持ち運んで使うことができます。
なお、nodejsでNexeアプリの開発を進めていくうちに、linuxやmacos向けにクロスプラットホームビルドした実行形式ファイルには問題がなくとも、Windows向けにバンドルしたプログラムだけが、
fs
node:internal/fs/utils.js:306
throw err;
^
Error: ENOENT: no such file or directory, readfile 'C:\Users\...\node_modules\path\to\some\file'
at Object.readSync (node:fs:1405:3)
#...中略
syscall: 'readfle',
code: 'ENOENT',
path: 'C:\\Users\\...\\node_modules\\somepath...'
...
Nexe自体のバグなのか、インストールしているnodejsに起因するものなのか、Windowsだけこうなると原因はさだかではありませんが、windowsのビルドだけ応急処置に
例えば、Express.jsで使う
node_modules/errorhandler/public
$ nexe dist/index.js \
--resource='node_modules/errorhandler/public/**/*' \
--target=windows-x64-14.15.3
Windowsでnodejsを利用できるようにする
先程は、NexeアプリをビルドするにもLinuxOS(著者の環境ではDebianOS)を利用することを想定していましたが、場合によってはWindowsのPCからNexeアプリをビルドしたいこともあるでしょう。
こちらの
「Boxstarter WebLauncher」に関しては、直接インストーラーからWindowsにインストールするか、もしくはPowerShellから以下のコマンドでインストールします。
% Set-ExecutionPolicy Unrestricted -Force
% iex ((New-Object System.Net.WebClient).DownloadString('https://boxstarter.org/bootstrapper.ps1'))
% get-boxstarter -Force
% Install-BoxstarterPackage https://raw.githubusercontent.com/nodejs/node/HEAD/tools/bootstrap/windows_boxstarter -DisableReboots
なお「Boxstarter WebLauncher」のインストールには、少なくともディスクに10GBの空き容量が必要になりますので、パソコンのストレージに十分な空きがあるか気をつけましょう。
動作テスト〜CurlでNexe-Expressサーバーにアクセス
ビルド済みのNexe実行バイナリをWindows上にコピーし、起動するかどうかを確認します。
NexeアプリをWindowsが正しく認識すると、以下のようなアイコンで表示されているはずです。

アイコンをダブルクリックすると、ネットワークポートを開けることになるので、Windowsのファイヤーウォールからポート開放の許可を確認するメッセージがポップアップしてきますので、これを許可します。

以下のようにターミナル上で、プログラムが動作していたらOKです。

もしくはバイナリのあるフォルダ内から実行しても同じです。
% index.exe
Nexe-Express server is now running at http://localhost:3000!
これでExpress.jsサーバーが起動状態になりました。
この状態で、同じLANグループにある
Curl
例えば、サーバー起動中のWindowsパソコンのホストIPが
192.168.0.123
http://192.168.0.123:3000
$ curl http://192.168.0.123:3000
Hello, local client!
きちんとレスポンスが得られれば、Windowsからでもポータブルなアプリ兼HTTPサーバーとして機能していると思います。 めでたしめでたし。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー