深入出不来nodejs源码-编译启动(1)

  整整弄了两天,踩了无数的坑,各种奇怪的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自己选,反正点那个下载源码的按钮:

深入出不来nodejs源码-编译启动(1)

  把东西弄下来解压到一个地方,然后双击文件夹里面的vcbuild.bat:

深入出不来nodejs源码-编译启动(1)

  可以在这个批处理文件打个断点,可以发现输出信息如下:

深入出不来nodejs源码-编译启动(1)

  脚本的开始都是在检测是否有预装对应的工具,然后调用其余的批处理文件进行编译。

  这个时间会比较长,可以先去吃个饭。你会发现文件夹在逐渐变大,最后大概有个20G……

  编译完成后,文件夹会有一个node.sln,在VS2017中选择文件-打开-项目/解决方案,双击这个文件,会把node项目给引到IDE中去。

  这时如果直接点击开始调试,可能会出现以下问题:

深入出不来nodejs源码-编译启动(1)

  这是因为项目的默认启动项设成了目录的第一个,右键解决方案,点击设置自动项目:

深入出不来nodejs源码-编译启动(1)

  选择单启动项目,把那个cares改成node:

深入出不来nodejs源码-编译启动(1)

  这样就可以开始启动node项目,时间非常的长……

  这时候再次点击开始调试,可能又会出现以下错误:

深入出不来nodejs源码-编译启动(1)

  这个弹窗其实是个幌子,真正的错误是控制台报错,这个Debug是一个类似于webpack打包的环境变量,有Debug和Release两种,设置地点在IDE的菜单下面:

深入出不来nodejs源码-编译启动(1)

  而这个文件确实找不到,但是我在Release里面发现了node.exe与那个失踪的openssl.def。

  解决办法就是把Release文件夹里的复制到Debug文件夹中去,然后再次尝试应该就成了,当然,如果把环境变量换成Release也是OK的。

  再再次点击开始调试,又是一段非常长的时间,最后成功的话,理论上是会弹出一个node的REPL窗口,就是平时在cmd里面输入node指令的样子,如下:

深入出不来nodejs源码-编译启动(1)

  检测一下是否读取的是本地的代码,打开node_main.cc,添加一个log代码:

深入出不来nodejs源码-编译启动(1)

  这次不点调试,太久了,点那个开始执行(不调试),可以到输出如下:

深入出不来nodejs源码-编译启动(1)

  至此,已经可以对nodejs的源码打log了,源码之路的基石已经铺好。

  不知道有没有类似于热重载的功能,这C++启动一次实在是太久了。

上一篇:深入出不来nodejs源码-流程总览


下一篇:深入出不来nodejs源码-V8引擎初探