windows7下electron加载使用sqlite3的技术要点
来源:互联网 发布:淘宝联盟能赚多少钱 编辑:程序博客网 时间:2024/05/14 06:58
因为项目新需求,需要使用nodejs和sqlite3进行开发。nodejs使用electron framework,然而开发过程中一坑又一坑,网上有关的资料不多,国内资料尤其少,所以写下走过一个一个的坑的过程来给同学借鉴。
首先推荐在darwin下开发,然而环境是不能强求的。在win7下使用electron和sqlite3开发,需要注意采用v8引擎的electron内置node可能不支持原生模块,所以需要重新编译原生模块并且替换electron可以支持的头文件部分,这是加载sqlite3的要点,以下会重点提示。
package.json和调用sqlite3的渲染进程js文件如下所示:
{ "name": "electron-sqlite3", "version": "1.0.0", "description": "by L.X", "main": "main.js", "scripts": { "start": "electron .", "rebuild": "electron-rebuild -f -w sqlite3" }, "keywords": [ "Electron", "sqlite3", "demo" ], "author": "L.X", "devDependencies": { "builder": "^3.2.1", "electron": "^1.4.13", "electron-rebuild": "^1.4.0" }, "dependencies": { "electron-prebuilt": "^1.4.13", "electron-rebuild": "^1.5.4", "electron-sqlite": "0.0.1", "sqlite3": "^3.1.8" }}
const sqlite3 = require('sqlite3');sqlite3.verbose();const db = new sqlite3.Database('mydb.db');db.serialize(function() { db.run("CREATE TABLE if not exists lorem (info TEXT)");});db.close();
第一行代码调用了sqlite3的模块,单独用node命令执行本js没有问题,当electron渲染进程执行到本行时,会调用node_modules文件夹下的sqlite3,而不是本地sqlite数据库,产生一个错误,稍后会提到,这是和单独用node命令执行的区别。
npm installnpm install --save electron-rebuildnpm install --save electron-prebuilt.\node_modules\.bin\electron-rebuild.cmd
官方文档给出了简易编译原生模块的方式,代码如上所示,然而我试了之后发现并没有什么用处,如果大家有谁这种方式能用可以联系我,如果好用的确方便。
执行npm install –save electron-rebuild需要安装python环境,官方推荐2.7版本,尤其不要超过3.0版本。
之后提示需要安装window sdk8.1,还需要安装visual studio2015,官方版本推荐2015,有老外说只能2015好用,我没有去验证,默默升级到2015。
之后提示需要c++套件,这个要下载安装就比较复杂了,机智的我用visual studio新建了一个c++工程,然后vs就默默的替我自动下载好了。
以上步骤比较凌乱,过程中我也忘记截图,然而却能搭建好编译环境,建议走一遍。以下是我遇到的两个主要问题:
一. Uncaught Error:cannot find mudule‘..\binding\electroon-v1.4-win32-x64\node_sqlite3.node’
提示在node_modules\sqlite3\lib\binding\electroon-v1.4-win32-x64下cannot find mudule,去binding下找不到electroon-v1.4-win32-x64文件夹,原因是npm install时加载package.json是会在node_modules下安装原生sqlite3模块,binding下会产生一个类似node-v51-win32-x64的文件夹,需要做的是编译产生node_modules\sqlite3\lib\binding\electroon-v1.4-win32-x64路径,手动修改并不能解决问题。编译方式如下:这个是官方给出的方式之一。
cd .\node_modules\sqlite3npm install nan --savenpm run prepublishnode-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.4-win32-x64node-gyp rebuild --target=1.4.13 --arch=x64 --target_platform=win32 --dist-url=https://atom.io/download/electron/ --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.4-win32-x64
二. Uncaught Eror: The system cannot find message text for message number 0x%1 in the message file for %2.
上文说到的手动修改路径,会报这个错误。其次错误的重编译也出产生这个错误,这个错误并非指编译失败,而是错误的指定了electron版本号、错误地加载electron header等问题,导致electron无法识别编译后的.node文件也会报这个错误。
node-gyp rebuild --target=1.4.13 --arch=x64 --target_platform=win32 --dist-url=https://atom.io/download/electron/ --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.4-win32-x64
以上命令行是编译的关键,–target代表electron的版本号,注意是环境变量的版本号,而不是package.json的electron版本号,可以通过electron -v来查;–arch是cpu的位数;–dist-url指定了electron header的下载来源,这一个比较重要,一定要去官方文档docs查阅最新的来源,网络上二手资料大多数已经过时,编译过程不报错但是使用会报错误二,我就在这里浪费了不少的时间,最后去翻官方文档才找到问题所在。
当执行完毕后,会产生编译文件在node_modules\sqlite3\build内如下图所示
并能产生node_modules\sqlite3\lib\binding\electroon-v1.4-win32-x64,执行npm start主进程调用到本渲染进程后,执行完毕会在当前路径下产生mydb.db文件,至此,问题解决。
- windows7下electron加载使用sqlite3的技术要点
- electron使用 sqlite3
- windows7下sqlite3的编译
- Electron实现使用Sqlite3库
- linux下sqlite3的使用
- linux下sqlite3的使用
- Electron-windows下的构建
- android开发下的一些技术要点
- android开发下的一些技术要点
- Ubuntu下sqlite3的安装及使用
- ubuntu下使用SQLite3的基本命令
- ubuntu下使用SQLite3的基本命令
- Linux下SQLite3的移植与使用
- Windows 下SQLite3的安装与使用
- windows7下使用Gavotte的RAMDisk
- Windows7下Git 的使用笔记
- 使用了下Sqlite3
- VS2013下使用sqlite3
- 编写sql语句时,最重要的是什么?
- DialogFragment源码分析及应用实战
- Android TableFixHeaders 最后添加一行计算总和,上下不能滑动,左右可以滑动
- stm32 定时器重映射
- redis hset使用
- windows7下electron加载使用sqlite3的技术要点
- sublime设置
- 史上最精炼Java基础知识点总结
- java微信公众号支付案例
- Activity详解 Intent显式跳转和隐式跳转, 及多个Activity之间传值 总结
- linux下的mysql相关操作
- jQuery事件绑定(三)
- SurvivalShooter学习笔记(五.敌人生命)
- <%%>和<%! %>和 <%=%>的区别