您的位置:首页 > Web前端 > Node.js

[置顶] windows上node-webkit安装sqlite、socket的那些坑

2016-04-07 20:46 639 查看
最近用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


好了,差不多就这些了。当然,这仅仅是安装,至于编译成功,看来我又得吐槽一篇文章了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: