nw.js上でdexieを使う

公開:2015-06-21 20:55
更新:2017-09-18 05:24
カテゴリ:nw.js,javascript,ブログ,html5

ブログシステムのコードを書き始めた。ダッシュボード・テンプレート SB Admin2 をベースに少しずつUIを作り替えていく作戦で始めた。実装はHubPressを参考にする。

HubPressでは設定情報を保存するデータストアとしてIndexedDBを使用している。IndexedDBはDBライクに操作できるdexieというライブラリを経由してアクセスする。私もこれに倣うことにする。

軽く下記のようなコードを書いてみると、これが動作しない。

調べてみると以下のことが分かった。dexie.jsのコードの外枠は以下のようになっている。

これはAMDとCommonJS、それとブラウザで動かす時によく書かれるコードである。nw.jsはglobalもwindowも両方持っているので、require()すると上記のコードだとCommonJS対応部分が有効となり、globalオブジェクトがグローバルオブジェクトとして関数の引数に設定される。

それで、IndexedDBのラップする部分のコードを見てみると以下のようであった。

コメントに書いてある通りだが、node.jsで使用するときはindexeddb-jsを事前にrequireしておかなくてはいけないようだ。

しかしnw.jsはwindowオブジェクトも持っており、IndexedDBもサポートしている。だけどglobalオブジェクトが渡されるのでpolyfillが必要になってしまうのだ。windowオブジェクトのIndexedDBを使わせるにはどうしたらよいかと少し考えたが、ベタな方法で回避することにした。require('dexie')する前に以下のコードを書くのである。

ちょっと不細工な方法だが、とりあえずこれで進めることにした。