为什么需要模块化
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式,这种方式就是模块化的方式。
使用模块有什么好处:
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');
来源:CSDN
作者:jimson_zhu
链接:https://blog.csdn.net/jimson_zhu/article/details/103548890