认识Node

08/06 21:02
阅读数 13

什么是Node?

Node 是 JavaScript 的一种运行环境。可以使 JS 代码不依赖浏览器也可以执行。他俩的差异如下:

两个运行环境都包含了 ECMScript 。另一方面 JavaScript 包含了 BOM 和 DOM。

  • BOM:浏览器对象模型,也就是 window 对象
  • DOM:文档对象模型,也就是 document 对象

而 Node 则包含了 V8 引擎。V8 是 Chrome 浏览器的 JS 引擎,性能和安全性都很高。Node进一步将 V8 引擎加工成可以在任何操作系统中运行 JS 的平台。

Node 全局对象

可以看到 JavaScript 全局对象可以分为四类:

  1. 浏览器专属,例如 windowalert 等等;
  2. Node 专属,例如 processBuffer__dirname__filename 等等;
  3. 浏览器和 Node 共有,但是实现方式不同,例如 consolesetTimeoutsetInterval 等;
  4. 浏览器和 Node 共有,并且属于 ECMAScript 语言定义的一部分,例如 DateStringPromise 等;

process

process 是管理当前 Node 进程状态的对象,提供了与操作系统的简单接口。有以下几种属性

process.pid //进程编号

proces.env //系统环境变量

process.argv //命令行执行此脚本时输入的参数

process.platform //当前操作系统的平台

Buffer

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

__filename 和 __dirname

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

Node 模块化机制

JS 的缺点:

  • 导入多个 JS 文件直接作用于全局命名空间,很容易产生命名冲突
  • 导入的 JS 文件之间不能相互访问,很不方便
  • 导入的 <script> 无法轻易去除或修改

Node 模块机制浅析

Node 引入了三个新的全局对象(还是 Node 专属哦):1)require;2) exports 和 3)module

exports (导出模块)

// myModule.js
function add(a, b) {
  return a + b;
}

/*
 *导出函数 add 
 *第一个add:模块名称,用于require引用
 *第二个add:函数名称
*/ 
exports.add = add;

require (导入模块)

require 用于导入其他 Node 模块,其接受一个字符串代表的模块名称或路径,通常被称为模块标识符。

  • 直接写模块名称,通常是核心模块或第三方文件模块,例如 osexpress 等
  • 模块的相对路径(不推荐使用绝对路径),指向项目中其他 Node 模块,例如 ./utils
// 导入内置库或第三方模块
const os = require('os');
const myModule = require('./myModule');
myModule.add(1,2);

// 通过相对路径导入其他模块
const utils = require('./utils');

module

module 对象有以下字段:

  • id:模块的唯一标识符,如果是被运行的主程序(例如 main.js)则为 .,如果是被导入的模块(例如 myModule.js)则等同于此文件名(即下面的 filename 字段)
  • path 和 filename:模块所在路径和文件名,没啥好说的
  • exports:模块所导出的内容,实际上之前的 exports 对象是指向 module.exports 的引用。例如对于 myModule.js,刚才我们导出了 add 函数,因此出现在了这个 exports 字段里面;而 main.js 没有导出任何内容,因此 exports 字段为空
  • parent 和 children:用于记录模块之间的导入关系,例如 main.js 中 require 了 myModule.js,那么 main 就是 myModule 的 parent,myModule 就是 main 的 children
  • loaded:模块是否被加载,从上图中可以看出只有 children 中列出的模块才会被加载
  • paths:这个就是 Node 搜索文件模块的路径列表,Node 会从第一个路径到最后一个路径依次搜索指定的 Node 模块,找到了则导入,找不到就会报错
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部