整整弄了两天,踩了无数的坑,各种奇怪的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++启动一次实在是太久了。

转载于:https://www.cnblogs.com/QH-Jimmy/p/9055637.html

深入出不来nodejs源码-编译启动相关推荐

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

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

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

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

  3. libuv访问mysql_浅析libuv源码-编译启动

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

  4. redhad环境android源码编译,启动流程  |  Android 开源项目  |  Android Open Source Project...

    建议的设备启动流程如下所示: 图 1. 启动时验证流程 适用于 A/B 设备的流程 如果设备使用的是 A/B 系统,则启动流程略有不同.必须先使用启动控件 HAL 将要启动的槽位标记为 SUCCESS ...

  5. Android源码编译详解【四】:Android 6.0_源码的下载与编译

     1.AOSP源码下载  AOSP:即为"Android Open-Source Project"的缩写,中文意为 :"安卓开放源代码项目". Google官方 ...

  6. Android 源码编译详解【合集篇】

    Android 源码编译详解[一]:服务器硬件配置及机型推荐 做 Android系统开发多年,开发环境都是入职就搭建好了,入职时拿个账号密码就直接开始搞开发了,年初换了新公司,所有的项目都是刚起步,一 ...

  7. Android源码编译及启动模拟器

    Android源码编译及启动模拟器 源码下载 (1)更改下载源 (2)安装源码下载工具 (3)下载源码 (4)安装环境依赖 源码编译 启动模拟器 源码下载 Ubuntu18.0 (1)更改下载源 源码 ...

  8. Linux编译程序源码环境,Linux下对nodejs环境进行源码编译并部署云应用

    Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Python.Perl.Ruby 等服务端语言平起平坐的脚本语言. 该环境安装非常简单,这里 ...

  9. nodejs源码_格物致知记一次nodejs源码分析的经历

    昨天分析http模块相关的代码时,遇到了一个晦涩的逻辑,看了想,想了看还是没看懂.百度.谷歌了很多帖子也没看到合适的答案.突然看到一个题目有点相识的搜索结果,点进去是Stack Overflow上的帖 ...

最新文章

  1. 倒计时7天!博客之星虚位以待,Macbook等你来拿
  2. 计算机里面有鬼的恐怖游戏,2018年度十大最佳PC恐怖游戏
  3. AI 场景的价值体现——视觉 AI 技术落地实践
  4. SVN终端演练(个人开发\多人开发)
  5. 开发日记-20190914 关键词 汇编语言王爽版 第五章
  6. 犯罪心理解读Mybatis拦截器
  7. 10、Power Query-合并查询与追加查询结合应用
  8. 一个 Cobol 程序员的告白
  9. Gartner:2022年全球IT支出将超4万亿美元,软件增速最高
  10. 程序员界大杯具:蜗居中的小贝是搞C++ 的 !
  11. 数据库史上最大投资!Neo4j获3.25亿美元F轮融资
  12. linux普通用户修改root密码及获取root权限
  13. 2017年秋季学期获“领跑衫”感言
  14. 携号转网查询接口API,手机号码归属地及运营商查询接口
  15. 最强战队 | 三维视觉、SLAM方向全球顶尖实验室汇总
  16. oneNET连接配置参数说明
  17. 12-Factor App简介
  18. Yolov8如何在训练意外中断后接续训练
  19. 移植OpenHarmony到星空派ARM芯片【1】
  20. SQL命令讲解(二)

热门文章

  1. BZOJ 2288 贪心 +链表
  2. Unity中有两种Animation Clip
  3. web服务器 字体.svg/.woff/.woff2 404错误 解决方案
  4. 内网更新服务器的搭建(WSUS)
  5. 《互联网项目运营分析》第四章 :互联网项目的技术选择与应用
  6. (转载)机器学习知识点(十一)隐马尔可夫模型
  7. Ubuntu下eclipse部署mysql jdbc驱动
  8. Unicode——Windows核心编程学习手札之二
  9. Leetcode 209. 长度最小的子数组 解题思路及C++实现
  10. Glow-流生成模型(一)