今年も夏めく季節がやって参りました。
年をとると時が過ぎるのも早いもので、もう蝉の声すら聞こえてきそうです。
さて、Electron(0.33.6)でsqlite3を使用しようと思ったところ、盛大にはまったので備忘録を残しておきます。
調べてみると幾つか記事が見つかります。
http://verysimple.com/2015/05/30/using-node_sqlite3-with-electron/
http://qiita.com/shghdyji/items/20d2a913e3e492726c55
原因としては
electron で探しに行っているsqlite3のpathと実際にinstallしているsqliteのパスが異なっているために起こる。
らしい。解決作としては
1 | cd node_modules/sqlite3 |
を実行するといいらしいが…。
prepublishはpackage.jsonのnpm-scriptsを実行するみたいだ。
….が、まさかの1行目からエラーを吐かれた。
すでに精神がボロボロだったが、色々いじってみた結果以下のコードでうまくった
まずグローバル環境にnode-gypをインストールする。npm install -g node-gyp
このモジュールはNode.jsのモジュールをコンパイルしてくれるモジュールで、今回はこいつのrebuildを使ってやる。なお、Python2.7系に依存しているかもしれない。
それで、node_modules/sqlite3に移動し、以下を実行
1 | node-gyp rebuild --target=<your electron version> --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v<your electron version>-darwin-x64 |
実行後いろいろwarningがでるがなんとか使えるようになった。
個人で使うものだしまぁいいかなということでwarningは放置してます。
2016-6-15追記
warning出たまま使ってみたらsql文は実行できるんだけどデータベースの挙動が不自然。ここにきて再度エラーを解決しようと頑張ったのでメモ。
まずNodeとnpmとelectronのバージョンを最新にアップデートした。1
2
3
4
5cd node_modules/sqlite3
npm install nan@2.3.3
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/node-(your version)-darwin-x64
node-gyp rebuild --target=<update Electron version> --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/node-(your version)-darwin-x64
warningが出るがスルーしてsqlite3/lib/に移動し、1
mv node-v48-darwin-x64 electron-v1.2-darwin-x64
sqlite3のモジュールにnan@2.3.3を突っ込んだ。
これで一応現在はうまく動いている。