[TOC]

一、概念

BOM 浏览器对象模型; DOM 文档对象模型;

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它的特点是事件驱动、非阻塞式I/O。正如浏览器端也是 JavaScript 的运行环境一样。它们之间的不同是,Node 包括了 V8 引擎,浏览器端则包括了 BOM、DOM。Node 为我们提供了一个无需依赖浏览器、能够直接与操作系统进行交互的 JavaScript 代码运行环境。

  • 构成:Node.js 由 Libuv、Chrome V8、一些核心 API 构成

image.png

  • 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 timer.js
    Hello World!
    
    执行以上代码时,Node 首先在所处的操作系统中创建一个新的进程,然后向标准输出打印了指定的字符串, 实际上执行的是 process.stdout.write('Hello World!\n')

    三、Node 全局对象

    1. process

    管理当前 Node.js 进程状态的对象,提供了与操作系统的简单接口。打开 Node REPL,可查看 process 对象的重要属性:
  • pid:进程编号
  • env:系统环境变量
  • argv:命令行执行此脚本时的输入参数。process.argv 返回数组的第 0 个元素是 node 的实际路径,第 1 个元素是脚本的路径,后面则是输入的所有参数
  • platform:当前操作系统的平台

    2. Buffer

    让 JavaScript 能够轻松地处理二进制数据流,结合 Node 的流接口(Stream),能够实现高效的二进制文件处理

    3. filename、dirname(仅在 Node 脚本文件中使用)

    分别代表当前所运行 Node 脚本的文件路径和所在目录路径

    四、Node 模块机制

    1. Javascript 的模块化

    在 ES2015 标准出现以前, JavaScript 语言定义本身并没有模块化的机制,构建复杂应用也没有统一的接口标准。人们通常使用一系列的