Cofactor Matrix Log

nwjs

# nwjs の使い方 0.35.4 頃の話 (2019/01) ## resuirements * node (npm) * Windows では ***WSLから使わない*** ようにするのがおすすめ。 linux 用のバイナリを引っ張ってきてしまうので面倒なことになる。 ## 準備 ~~~bash npm init -y npm i -D nwjs-builder-phoenix ~~~ nwjs-builder-phoenix は、勝手に nwjs のバイナリを取ってきてくれるので、nwjs そのもののインストールは基本的には不要。 nwjs-builder-phoenix はコマンドが他と被りがちなので、***グローバルインストールは避ける*** 。 package.json に以下を追記 ~~~json "build": { "nwVersion": "stable" }, "main": "index.html" ~~~ nwVersion を指定しないと、かなり古い LTS 版を使おうとするので、 stable 指定を推奨。 nw のエントリポイントは html で良いのでここでは "index.html" とした。 js も指定できるけれど、その場合 window を開く手間が増える。 例: ~~~js nw.Window.open("index.html"); ~~~ ## 実行 ~~~bash npx run . ~~~ ## パッケージング Windows 64 bit 向けの例 ~~~bash npx build --tasks win-x64 . ~~~ `--tasks` に複数指定することで、各プラットフォーム向けのパッケージを一度に作ることができる。 ~~~bash npx build --tasks win-x86,win-x64,linux-x86,linux-x64,mac-x64 . ~~~ 成果物は `dist` ディレクトリに作られる。 package.json の "build" 項目に追記することで、 パッケージングを色々コントロールできる。 一部ファイルやディレクトリを除外するなども楽なので、electron と違って、 別途アプリフォルダを掘る必要はほぼない。 詳細は https://github.com/evshiron/nwjs-builder-phoenix/blob/HEAD/docs/Options.md ## nw のインストールが別途必要になる場合 nwjc (javascript のバイトコードコンパイル)等を使いたい場合は、nwjs の sdk が必要になるので、別途インストールが要る。 (phoenix のキャッシュから引っ張ることもできなくはないが...) ~~~bash npm i -D nw@sdk ~~~ 悲しいことに bin に配置してくれないので、 scripts で直指定。 ~~~json "scripts": { "nwjc": "./node_modules/nw/nwjs/nwjc" } ~~~ usage ~~~bash npm run nwjc <js-file> <bitecode-file> ~~~ ## その他 エントリポイントは js でも html でも。 html の方がいろいろと楽。 以下、書いておきたいもの。 ### ファイルドロップの禁止 node や nwjs の機能を使えてしまうので、 意図しない HTML ファイルの読み込みは危険。 ~~~js window.addEventListener('dragover', e => { e.dataTransfer.dropEffect = "none"; e.preventDefault(); e.stopPropagation(); return false; }); window.addEventListener('drop', e => { e.preventDefault(); e.stopPropagation(); return false; }); ~~~ ### フルスクリーン F11 での最大化/最小化は無効化されているので、 使いたければ自分で設定する。 ~~~js nw.App.registerGlobalHotKey(new nw.Shortcut({ key: "F11", active: () => nw.Window.get().toggleFullscreen(); })); ~~~ (追記) リロード時に効かなくなる模様。 registerGlobalHotKey ではなく、素直にキーボードイベントを拾った方が良いかもしれない。