どうも、@ryusei__46です。
今回は、NW.jsでネイティブモジュールをビルドするのにかなり苦戦したので、備忘録を残したいと思います。
Electronであれば、便利な「electron-rebuild」モジュールでワンタッチでいけましたが、NW.jsの場合はちょっと癖があった。
ネイティブアプリフレームワークでは、Electronが一番有名ですが、最近使うのをやめました。理由は、ソースコードのプロテクション機能がないからですね。やはりコード見られるのはセキュリティー的にまずいですし、コードがパクられる可能性があります。
ではとりあえず、サクッとNW.jsでの、ネイティブモジュールのリビルドをやっていきます。
私の環境
- Windows 11 Pro
- node.JS v18.13.0
- node-gyp v9.1.0
- node-pre-gyp v0.17.0
- nw v0.72.0
- nw-gyp v3.6.6
- sqlite3 v5.1.3
ネイティブモジュールのリビルド
最近、ネイティブアプリの個人開発で、Sqliteを使う機会があり、「sqlite3」モジュールを採用することになりました。こちらはネイティブモジュールなので、NW.jsで使用する際は、リビルドが必要です。
-- プロジェクトのルート
|--- node_module
|~~~ src // ソース・ファイル
|=== build // 配布用ビルド済みパッケージ
|=== package.json
上記のような構造にして開発を行っています。まず、Sqlite3モジュールをnpmでインストールします。
npm i sqlite3 --save
次にリビルドに必要なnpmパッケージをインストールします。
npm i node-gyp node-pre-gyp nw-gyp -g
すべてオプション「-g」を付けて、グローバルインストールするのがおすすめです。
インストールが完了したら、先程インストールしたパッケージ「Sqlite3」のリビルド作業をしていきます。ここがElectronのときと違って、リビルドしたいモジュールのプロジェクト内に移動して作業を行う必要があります。
つまり、インストールした「Sqlite3」のプロジェクトディレクトリ「プロジェクトのルート\node_module\sqlite3」に「cd」コマンドで移動し、「sqlite3」をNW.js用に「node-pre-gyp」でリビルドします。
cd .\mode_module\sqlite3
node-pre-gyp rebuild --runtime=node-webkit --target=0.72.0
--target_arch=x64
node-pre-gypで使うオプションですが、「–runtime=node-webkit」はそのまま、「–target=x.x.x」は、現在使用中のNW.jsのバージョン番号を記載してください。「–target_arch=x64」は、PCのアーキテクチャの種類を記載してください。Windows OS 64bitの場合はそのままで大丈夫です。
これでリビルドができるはずです。