深入出不来nodejs源码-编译启动
整整弄了两天,踩了无数的坑,各种奇怪的error,最后终于编译成功了。
网上的教程基本上都过时了,或者是版本不对,都会报一些奇怪的错误,这里总结一下目前可行的流程。
node版本:v10.1.0。
首先需要一些准备工作:
1、Visual Studio 2017 传送门:https://www.visualstudio.com/zh-hans/downloads/
2、python2.7 传送门:https://www.python.org/downloads/release/python-2715/
3、NASM 传送门:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win64/
4、Git bash 传送门:https://git-scm.com/downloads
全部安装完,然后记得给python与NASM添加环境变量。
接下来就是把node的源码给down下来,传送门:https://nodejs.org/en/download/current/
这个LTS还是current自己选,反正点那个下载源码的按钮:
把东西弄下来解压到一个地方,然后双击文件夹里面的vcbuild.bat:
可以在这个批处理文件打个断点,可以发现输出信息如下:
脚本的开始都是在检测是否有预装对应的工具,然后调用其余的批处理文件进行编译。
这个时间会比较长,可以先去吃个饭。你会发现文件夹在逐渐变大,最后大概有个20G……
编译完成后,文件夹会有一个node.sln,在VS2017中选择文件-打开-项目/解决方案,双击这个文件,会把node项目给引到IDE中去。
这时如果直接点击开始调试,可能会出现以下问题:
这是因为项目的默认启动项设成了目录的第一个,右键解决方案,点击设置自动项目:
选择单启动项目,把那个cares改成node:
这样就可以开始启动node项目,时间非常的长……
这时候再次点击开始调试,可能又会出现以下错误:
弹窗其实是个幌子,真正的错误是控制台报错,这个Debug是一个类似于webpack打包的环境变量,有Debug和Release两种,简单全局搜索一下,可以发现用法都是类似这样的:
我估计啊,OutDir就跟process.env一样。
环境变量设置地点在IDE的菜单下面:
而这个文件确实找不到,但是我在Release里面发现了node.exe与那个失踪的openssl.def。
解决办法就是把Release文件夹里的opendssl.def复制到Debug文件夹中去,然后再次尝试,node.exe文件会自动生成。这下应该就成了,当然,如果把环境变量换成Release也是OK的。
再再次点击开始调试,又是一段非常长的时间,最后成功的话,理论上是会弹出一个node的REPL窗口,就是平时在cmd里面输入node指令的样子,如下:
检测一下是否读取的是本地的代码,打开node_main.cc,添加一个log代码:
这次不点调试,太久了,点那个开始执行(不调试),可以看到输出如下:
至此,已经可以对nodejs的源码打log了,源码之路的基石已经铺好。
不知道有没有类似于热重载的功能,这C++启动一次实在是太久了。