定义
- 什么是模块? 将一个复杂的程序依据一定的规则封装成几个块, 块的内部数据是私有的, 只是向外部暴露一些接口,与外部其它模块通信。
- 前端模块化开发中:一个js文件就是一个模块,在js文件模块中定义的数据是私有的, 可以向外部暴露数据和方法,其它js文件模块可以引入暴露的方法数据进行使用。
模块化规范
CommonJS
- 概述 Node 应用由模块组成,采用 CommonJS 模块规范。每个文件就是一个模块,有自己的作用域。 在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。 在服务器端,模块的加载是运行时同步加载的;在浏览器端,模块需要提前编译打包处理。
- 特点 所有代码都运行在模块作用域,不会污染全局作用域。 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。 要想让模块再次运行,必须清除缓存。 模块加载的顺序,按照其在代码中出现的顺序。
- 基本语法
- 暴露 module.自定义名称=需要暴露的变量或者函数
- 引用 const 名称 =require('暴露文件的路径') a.js
//求两个数最大值
funciton getMax(a,b){
if(a>b){
return a
}
retirn b
}
//定义一个变量
let num=100
//暴露出去
module.export.getMax=getMax
module.export.num=num
b.js
//引入暴露的模块
const a=reqiure('./a.js')//路径
//使用暴露的函数,变量
let max=a.getMax(20,40)
let num=a.num
ES6模块化
- 定义 ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。 CommonJS 和 AMD 模块,都只能在运行时确定这些东西。
- 暴露 export
- 引入 import ... from
- 基本用法
a.js
//求和
function getSum(a,b){
return a+b
}
let age=19
//暴露函数或变量
//第一种方法
export {getSum,age}
//第二种方法
export function getMax(a,b){
}
//第三种
export default {}|name
b.js
//引入模块
import {getSum,age} from './a.js'//这个是引入的地址
//使用
let sum=getSum(20,20)