ブログシステムのコードを書き始めた。ダッシュボード・テンプレート 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')
する前に以下のコードを書くのである。
ちょっと不細工な方法だが、とりあえずこれで進めることにした。