[TOC]
一、概念
BOM 浏览器对象模型; DOM 文档对象模型;
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它的特点是事件驱动、非阻塞式I/O。正如浏览器端也是 JavaScript 的运行环境一样。它们之间的不同是,Node 包括了 V8 引擎,浏览器端则包括了 BOM、DOM。Node 为我们提供了一个无需依赖浏览器、能够直接与操作系统进行交互的 JavaScript 代码运行环境。
- 构成:Node.js 由 Libuv、Chrome V8、一些核心 API 构成

- Node bindings:JavaScript 与 C++ 连接的桥梁,对下层模块进行封装,向上层提供基础的 API 接口。
- V8:Google 开源的高性能 JavaScript 引擎,使用 C++ 开发,并且应用于谷歌浏览器
- Libuv:是一个跨平台的支持事件驱动的 I/O 库。它是使用 C 和 C++ 语言为 Node.js 所开发的,同时也是 I/O 操作的核心部分,例如读取文件和 OS 交互。
- C-ares:C-ares 是一个异步 DNS 解析库
- Low-Level Components:提供了 http 解析、OpenSSL、数据压缩(zlib)等功能
二、运行 Node 代码
1. REPL 交互式输入运行
REPL 的全称是 Read Eval Print Loop(读取-执行-输出-循环),通常可以理解为交互式解释器,你可以输入任何表达式或语句,然后就会立刻执行并返回结果。终端输入 node,即可进入 REPL,ctrl+d退出$ node Welcome to Node.js v16.14.0. Type ".help" for more information.2. 执行 Node 脚本文件
console.log('Hello World!');
执行以上代码时,Node 首先在所处的操作系统中创建一个新的进程,然后向标准输出打印了指定的字符串, 实际上执行的是$ node timer.js Hello World!process.stdout.write('Hello World!\n')三、Node 全局对象
1. process
管理当前 Node.js 进程状态的对象,提供了与操作系统的简单接口。打开 Node REPL,可查看 process 对象的重要属性:
- pid:进程编号
- env:系统环境变量
- argv:命令行执行此脚本时的输入参数。process.argv 返回数组的第 0 个元素是 node 的实际路径,第 1 个元素是脚本的路径,后面则是输入的所有参数
-
2. Buffer
让 JavaScript 能够轻松地处理二进制数据流,结合 Node 的流接口(Stream),能够实现高效的二进制文件处理
3. filename、dirname(仅在 Node 脚本文件中使用)
四、Node 模块机制
1. Javascript 的模块化
在 ES2015 标准出现以前, JavaScript 语言定义本身并没有模块化的机制,构建复杂应用也没有统一的接口标准。人们通常使用一系列的
