最近用node-webkit开发一个js打包软件workCloud。最开始,用的是mysql,后来打算增加个本地项目打包功能,于是改用了sqlite。其中的血泪,唉,一言难尽呐。。。
不得不说,windows上配置开发环境实在是有够坑的。很多时候还查不到准确的解决方案。因为windows版本多、补丁多,导致对应的解决方案也多。有时候为了解决问题,不得不一个个去尝试,甚至将所有软件卸载,重新安装新的版本。。。
好了,废话不多说,其中的辛酸且听在下一一道来。
1. 蛋疼的sqlite + node-webkit
按照惯例,直接npm install sqlite3
,然后运行nw。结果,竟然报错了。
Uncaught Error: The dialect sqlite is not supported. Supported dialects: mariadb, mssql, mysql, postgres, and sqlite. (Error: Please install sqlite3 package manually)
虾米情况,不是刚刚装了sqlite吗?因为在下用sequelize来操作数据,而且这个错也是sequelize报的,所以最开始把问题定位到了sequelize这个js框架上了。结果谷歌了半天,丝毫没找到解决的办法。
后来,干脆一脚踹开sequelize,直接自己来。首先在控制栏尝试输入require('sqlite3')
,得到了以下的错误:
Error {code: "MODULE_NOT_FOUND", stack: (...), message: "Cannot find module 'D:\doSomething\workCloud\node_…\node-webkit-v0.12.3-win32-x64\node_sqlite3.node'"}
为什么会找不到sqlite模块呢?这不应该啊,以前都这么搞都没问题,这次咋就害羞了呢?
后来一拍脑袋,会不会是node-webkit造成的呢?这么一查,果然网上有很多跟我同病相怜的病号啊!而且都是老外,看来这也算是富贵病了!
后来在sqlite的github上找到了这样一句话
Because of ABI differences, sqlite3 must be built in a custom to be
used with node-webkit.
好吧,看来还真不怪人家!人家都已经说了因为ABI的不同,需要自己重新编译。哈哈,终于找到解决方案了,总算皇天不负有心人!看来,也没什么麻烦的嘛,分分钟搞定!(此时在下还沉浸在一片舒爽中,丝毫没有预见后面即将到来的灾难。。。)
按照官方给出的步骤进行安装:
To build node-sqlite3 for node-webkit:
- Install nw-gyp globally: npm install nw-gyp -g (unless already
installed) - Build the module with the custom flags of –runtime, –target_arch,
and –target:NODE_WEBKIT_VERSION="0.8.6" # see latest version at https://github.com/rogerwang/node-webkit#downlo
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=$(NODE_WEBKIT_VERSION)
第一步安装nw-gyp,这个成功了。结果运行第二步,又失败了。提示python不存在。
2.安装python
我安装的是python2.7,安装好后需要设置下:
npm config set python /Python27/python.exe --global
安装好python,再安装sqlite,结果又报错了。提示缺少”VCBuild.exe”。
MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,
安装 .NET Fram ework 2.0 SDK;2) 安装 Microsoft Visual Studio 2005;或 3) 如果将该组件安装到了 其他位置,请将其位置添加到系统 路径中。
对于这个问题,在下真是感到崩溃了。以前安装socket.io也遇到过这个问题,半天都没搞好。最后请教安装过的同事,结果人家得意地来了句“我是在linux上安装的…”
我当时重装系统的心都有了!可是随后公司的IT部门8000发话了,公司电脑不能安装linux系统。。。好吧,我还是老老实实安装VC++吧!尼玛,这得几个G吧!这么多版本,到底选哪个呢?好吧,最新的应该是最好的,visual studio 2015,就它了!
3、史上巨坑的VC++
一下午的时间,终于下完了2015,安装又花了好久。结果,还是报错。
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(297,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry.
TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. [C:\Users\Jason.yang\AppData\Roaming\npm\node_modules\ws\node_modules\bufferutil\build\bufferutil.vcxproj]
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.targets(152,5): error MSB6006: “CL.exe”已退出,代码为 -1073741515。 [C:\Users\Jason.yang\AppData\Roaming\npm\node_modules\ws\node_modules\bufferutil\build\bufferutil.vcxproj]
gyp ERR! build error
gyp ERR! stack Error:C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074
:12)
这尼妹的,还要不要人活了!后来整天半天,实在搞不定,在网上看到一片文章Fix ‘node-gyp rebuild’ error on windows 只好抱着试试看的想法,重新下载了Visual C++ 2010 Express
最后总算有情人终成眷属,2015不行,换2010,反正都是一家兄弟,肥水不流外人田嘛!呃,我是不是说错什么了。。。
好了,吐槽了这么多,我总结下:
1、安装phyon,安装后设置
npm config set python /Python27/python.exe --global
2、安装Visual C++ 2010 Express另外安装好后,需要强制指定版本
npm config set msvs_version 2010 --global
3、Windows SDK 7.1
4、Visual Studio 2010 SP1
5、Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1
6、安装nw-gyp、node-pre-gyp
如果还是不行,最后记得用Windows SDK 7.1 自带的命令行工具试试,即:Start -> All Programs -> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Command Prompt
好了,差不多就这些了。当然,这仅仅是安装,至于编译成功,看来我又得吐槽一篇文章了。。。