整整弄了两天,踩了无数的坑,各种奇怪的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两种,设置地点在IDE的菜单下面:

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

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

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

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

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

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

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

深入出不来nodejs源码-编译启动(1)的更多相关文章

  1. 深入出不来nodejs源码-V8引擎初探

    原本打算是把node源码看得差不多了再去深入V8的,但是这两者基本上没办法分开讲. 与express是基于node的封装不同,node是基于V8的一个应用,源码内容已经渗透到V8层面,因此这章简述一下 ...

  2. 深入出不来nodejs源码-timer模块(JS篇)

    鸽了好久,最近沉迷游戏,继续写点什么吧,也不知道有没有人看. 其实这个node的源码也不知道该怎么写了,很多模块涉及的东西比较深,JS和C++两头看,中间被工作耽搁回来就一脸懵逼了,所以还是挑一些简单 ...

  3. 深入出不来nodejs源码-从fs.stat方法来看node架构

    node的源码分析还挺多的,不过像我这样愣头完全平铺源码做解析的貌似还没有,所以开个先例,从一个API来了解node的调用链. 首先上一张整体的图,网上翻到的,自己懒得画: 这里的层次结构十分的清晰, ...

  4. 深入出不来nodejs源码-events模块

    这一节内容超级简单,纯JS,就当给自己放个假了,V8引擎和node的C++代码看得有点脑阔疼. 学过DOM的应该都知道一个API,叫addeventlistener,即事件绑定.这个东西贯穿了整个JS ...

  5. 深入出不来nodejs源码-内置模块引入再探

    我发现每次细看源码都能发现我之前写的一些东西是错误的,去改掉吧,又很不协调,不改吧,看着又脑阔疼…… 所以,这一节再探,是对之前一些说法的纠正,另外再缝缝补补一些新的内容. 错误在哪呢?在之前的初探中 ...

  6. 深入出不来nodejs源码-内置模块引入初探

    重新审视了一下上一篇的内容,配合源码发现有些地方说的不太对,或者不太严谨. 主要是关于内置模块引入的问题,当时我是这样描述的: 需要关注的只要那个RegisterBuiltinModules方法,从名 ...

  7. 深入出不来nodejs源码-timer模块(C++篇)

    终于可以填上坑了. 简单回顾一下之前JS篇内容,每一次setTimeout的调用,会在一个对象中添加一个键值对,键为延迟时间,值为一个链表,将所有该时间对应的事件串起来,图如下: 而每一个延迟键值对的 ...

  8. 深入出不来nodejs源码-流程总览

    花了差不多两周时间过了下primer C++5th,完成了<C++从入门到精通>.(手动滑稽) 这两天看了下node源码的一些入口方法,其实还是比较懵逼的,语法倒不是难点,主要是大量的宏造 ...

  9. 浅析libuv源码-编译启动

    面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起. V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁:而libuv则是负责操作系统底层功能的 ...

随机推荐

  1. Swift之GCD 使用指南2

    Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸 ...

  2. "《算法导论》之‘树’":二叉查找树

    树的介绍部分摘取自博文二叉查找树(一).二叉查找树(二).二叉查找树. 1. 树的介绍 1.1 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合. 把它叫做“ ...

  3. Leetcode_190_Reverse Bits

    ), return 964176192 (represented in binary as00111001011110000010100101000000). 思路: (1)题意为给定无符号32位整数 ...

  4. 最新App Store审核10大被拒理由

    最近,苹果在官网给出了截至2015年2月份应用被拒绝的十大理由,其中50%以上的应用被拒绝都是因为这10个原因,其中7个理由和2014年相同,其中排名前三的原因分别是:需要补充更多信息.存在明显的bu ...

  5. JS基础:this的指向以及call、apply的作用

    this 的指向 在具体的实际应用中,this 的指向无法在函数定义时确定,而是在函数执行的时候才确定的,根据执行时的环境大致可以分为以下3种: 1.当函数作为普通函数调用时,this 指向全局对象 ...

  6. Linux下编译安装BOOST

    linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装: #yum install gcc ...

  7. Linux常用资源(不断改进中)

    Linux常用命令全集:  http://linux.chinaitlab.com/special/linuxcom/Index.html ubuntu 12.04 配置指南: http://www. ...

  8. 关于H5的Canvas

    1.什么是canvas? <canvas>标签是h5新增的,通过脚本(通常是js)来绘制图形,canvas只是一个图形容器,或者说是画布. canvas可以绘制路径.图形.字以及添加图像. ...

  9. Angular5 宏观把控

    1.首先,Angular5相对于Angular4有了一些新的特性: (1)i18n国际化管道: (2)一个组件可以以多个名称导出: (3)使用httpClient: 相比于http,httpClien ...

  10. 如何找某个样式属于哪个Element

    如果找不到样式所在的Element,那么可以参考排除法,逐个删除覆盖在同一位置的元素,如果该样式消失,那么可以判断为这个样式.