Node.js日记:模块化

徘徊边缘 提交于 2019-12-15 18:31:05

为什么需要模块化

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式,这种方式就是模块化的方式。

使用模块有什么好处:

1)最大的好处是大大提高了代码的可维护性;

2)其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括 Node.js 内置的模块和来自第三方的模块;

3)使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。

什么是模块

在 JavaScript 领域:

- 模块是一段 JavaScript 代码,具有统一的基本书写格式。

- 模块之间通过基本交互规则,能彼此引用,协同工作。

模块化规范

对书写格式和交互规则的详细描述,就是模块定义规范(Module Definition Specification)

- AMD 规范:Require.js
- CMD 规范:Sea.js
- CommonJS 的 Modules 规范:Node.js

模块

模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。

换言之,一个 Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。

在 Node.js 中,当每个 JavaScript 文件在执行或被 require 的时候,Node.js 其实创建了一个新的实例 var module = new Module(),这个实例名叫 module。

这也是没有定义 module 这个变量,却能 console.log 出来而不会报错的原因。

而这个实例中有个 exports 属性默认是空对象,而这个属性里面的值就是该模块被导出的的东西。

其他模块要使用这些导出的东西,就得使用 require 导入。

代码举例:

exports = module.exports = {};

模块化使用

自定义模块(导出和导入)的方式使用模块。

1)方式 1

导出:

// sum.js
var sum = function(a, b){
    return parseInt(a) + parseInt(b);
}
// 导出模块 等价于 module.exports.sum = sum
exports.sum = sum;

导入:

// main.js
// 导入模块
const m = require('./03.sum.js');
console.log(m.sum(1, 2));

2)方式 2

导出:

// sum.js
global.sum = function(a, b){
    return parseInt(a) + parseInt(b);
}

导入: 

// main.js
require('./03.sum.js');
console.log(global.sum(5, 6));

模块细节

- 已经加载的模块会被缓存,已提高加载性能,根据加载的路径来判断是否加载过。

- 加载文件的后缀 `.js` 可以省略。模块文件常见结尾后缀有 `.js`、`.json`、`.node`,注意若省略后缀,若在同一个目录中出现文件名相同后缀名不同的话,加载的顺序如下:

.js
.json
.node

常用系统内置模块

- fs:文件操作
- http:网络操作
- path:路径操作
- querystring:查询参数解析
- url:url 解析

代码举例:

const fs = require("fs");
const http = require('http');
const path = require('path');
const querystring = require('querystring');
const url = require('url');

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!