模块化的来源
在 es6 之前JS 是没有模块化功能的, es5中不支持模块化,通常我们都是用一个html 文件引入多个 JS 文件,这样很容易造成变量污染, 代码无法维护
什么是模块化
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元
一个js文件可以引入其他的js文件,能使用引入的js文件的中的变量、数据,这种特性就称为模块化。
nodejs是支持模块化的。
模块化的规范
概念:
概念:拆分模块和组合模块时,所遵守的规则,就叫做模块化规范。
例如:在 Node.js 中,导入其它模块时,统一使用 require() 函数。
//导入 fs 模块
const fs = require('fs')
//导入 path 模块
const path = require ('path')
-
CommonJS 规范:nodejs中遵守的就是commonjs规范。
-
ES6 模块化规范:(前后端通用的模块化规范;Node.js、Vue、React 中都能使用!)
-
CMD 和 AMD 模块化规范(较少使用): CMD--sea.js, AMD-require.js
-
UMD 叫做通用模块定义规范(Universal Module Definition),它可以通过运行时或者编译时让同一个代码模块在使用 CommonJs、CMD 甚至是 AMD 的项目中运行。它没有自己专有的规范,是集结了 CommonJs、CMD、AMD 的规范于一身。
模块化的好处
使用模块作用域可以防止全局变量污染,文件依赖等问题产生
- 提高了代码的复用性
- 提高了代码的可维护性
- 可以实现按需加载
历程
es6之前 :
es5不支持模块化,为了让支持模块化,我们一般会借用第三方库来实现
es6之后:
es6原生语法也支持模块化(并不表示浏览器也直接支持模块化 --- 需要单独设置一下)
Nodejs内部也支持模块化(与es6的模块化有些不同之处)。
用commonJS 规范来自定义模块
nodejs 的三种模块
-核心(内置)
-第三方
自定义
在Node.js 中定义模块,要遵守 CommonJS 的模块化规范。CommonJS 规范中主要规定了以下 3 项内容:
①导入其它模块时,统一使用 require() 函数。
②每个 .js 文件,都是一个独立的模块,模块内的成员都是私有的。
③在每个 JS 模块中,使用 module.exports 向外共享成员。
自定义模块的特点:
①使用 require('自定义模块的路径') 即可导入自定义模块;
②自定义模块内的变量、函数等都是私有的,默认无法被外界访问到;