模块化
一:概念
模块是指将一个系统的各个功能按照某种方式组织起来的架构模式。旨在降低各个功能的依赖度,提高系统的复用性、扩展性。
二:特点
2.1 可维护性
一个设计良好的模块意在尽可能减少对代码库的依赖,所以它才能单独地扩展和完善。
2.2 可重用性
模块可以被重用,避免多次复制粘贴代码。
2.3 重命名空间
模块可以创建一个私有空间,从而避免全局空间的污染
2.4 解决解析的依赖性
模块相互独立,同时又可以相互访问。由于在加载它们时可以实现异步或按需加载,因此无需考虑加载的顺序。
三:规范
3.1 CommonJS
nodejs里面最好使用CommonJS,因为nodeJS最新版16点几才支持ES6模块化,但是不太稳定。
3.2 AMD
异步模块化定义:实现规范的模块库==> RequireJS加载器
AMD的出现代表前端真正有了模块化(国外使用率高)
3.3 CMD
公共模块化定义:==>SeaJS加载器
语法兼容,包括了CommonJS和AMD的东西,不仅能用在前端(国内使用率高)
3.4 UMD
联合模块化定义:通过市面上的东西自己封装一下来使用
3.5 ES6模块
官方推出来的模块,上面的几种都是民间的模块化
-
导入模块
import.....from.... //import {getMax} from "./max.js"; //import 变量名(当不是默认的时候变量需要解构) form 地址
在可以直接使用这个方法的时候就可以直接导入地址不用给他赋值一个变量名,如就像node里面连接数据库时引用的db.js文件时。
import "./fill.js"
-
导出模块
export ..... //export {函数方法} //这个{}不是一个JSON对象,是es6模块里面专用的一个对象
默认导出模块只能有一个时才能使用,当一个js文件里面有2个或两个以上的方法时就不能使用默认的方法。
//默认方法的好处就是在引入的时候不需要结构 export {generate as default}
其他写法
//默认的时候 export default function fillAry(length){ let ary = []; for(let i=0;i<length;i++){ ary.push(generate(100)); } return ary; } //不默认的时候 export function getMax(ary){ let max = 0; for(let i=0;i<ary.length;i++){ if(ary[i] > max){ max = ary[i]; } } return max; }