windows平台搭带c++扩展的nodejs环境

来源:互联网 发布:王健林 鲁豫 知乎 编辑:程序博客网 时间:2024/06/05 12:42

公司产品需要使用nodejs作后台服务器,同时要用C++处理逻辑和数据库存储,所以需要nodejs及其node-gyp扩展包环境,这环境在linux上搭建比较方便,在安装gcc和python2.6或2.7的环境上直接configure、make install就行了。但是作为linux新手,感觉linux上编码简直是痛苦,没有智能提示,嗯,我是linux新手。于是想回到windows上开发。

        可是在windows上装环境就稍微麻烦一点,摸索了几天才装上了。目前nodejs官网最新版本是6.10.0,此版本貌似只能用VS2015编译+python2.6或2.7(用VS2010没编译成功,mingw我还在摸索中),官网给的nodejs6.10.0的msi安装包安装后只有node.exe程序和npm(js包)这样的运行环境,没有node c++扩展的开发环境,也就是没有node相关的头文件和静态库即node、v8、uv等等,所以得自己拿源码来编译。

        先简单说一下关系,node.exe是javascript的解释器,基于v8框架可以使用node-gyp(也是一个js包,由node.exe解释执行)包将同样基于v8框架的C++代码编译为nodejs插件包来调用。新版本的nodejs已经自带npm,npm也是一个js包,由node.exe解释执行,它是nodejs的工具包管理工具,使用“npm install XXX”和“npm uninstall XXX”来安装和卸载其它工具包,比如node-gyp就可用npm来安装。

        编译nodejs源码前,先要安装VS2015和python2.6或2.7的环境,然后启动cmd控制台,进入源码目录,deps是依赖包的目录,发现npm就在里面,这个是js包,不需要编译,而openssl、uv、v8就需要编译了:


回到外层目录,执行vcbuild.bat就可编译,可加help查看帮助,再详细点文本方式打开vcbuild.bat,还会发现更多细节,比如运行“vcbuild VC2015”也是一样的。



开始本想试试加个msi项编译后打个包,发现还需要装什么Wix,没功夫研究了,就直接编译Release版了。

编译完成后,结果在当前目录下的Release目录里:

        

现在要把可执行程序和lib库以及外面src目录和deps目录的头文件和npm包提取出来,高手可以自己写脚本提取这些东东尤其是头文件。但我查看vcbuild.bat脚本发现原来configure是用python写的,看来大多过程都是bat和python在工作了。大致是vcbuild.bat调用python configure生成node.sln工程文件,再调用VS的msbuild程序来编译node.sln。

然后查看目录下的供gcc用的makefile文件,原来是调用tools目录下的install脚本,这应该是linux上编译的步骤,windows平台本来是要用Wix打包成msi的,现在我去按linux上的步骤去做:

于是乎我只要在命令行中输入该语句,就可以提取出相关的东西,再看看install.py脚本,发现它会从out\Release\里去提取node.exe,这是gcc编译时的生成路径,而VS编译时只有Release,没有out目录,所以干脆新建一个out目录,将Release目录移进去,

脚本在提取npm和node-gyp时会建立软链接,这个在windows系统上会报错,所以在如图第36行前加#将它注释掉先。

然后在命令行里输入“python tools\install.py [install | uninstall] <路径前缀>  <目录名>”,即可将node.exe、头文件、npm包提取到“路径前缀+目录名”的路径里,如图,我是将之提取到上级目录下的nodejs6.10.0目录中,


最后还是有一点需要手动处理的工作,查看提取后的目录,发现bin里只有node.exe,lib里只有npm包,也就是说之前编译的Release目录下的lib静态库和其它可执行程序还没有提取出来,需要手动复制。还有需要把lib\node_modules\npm\bin\npm.cmd和lib\node_modules\npm\bin\node-gyp-bin\node-gyp.cmd复制到node.exe所在的bin目录里,最后将该bin目录添加到系统的PATH环境变量中,就可以在命令行里执行node、npm、node-gyp命令了。node-gyp本可以用npm安装的,它这里直接提供了。


0 0
原创粉丝点击