14-前端模块化
1. 为什么要模块化
随着前端项目越来越大,团队人数越来越多,多人协调开发一个项目成为常态。例如现在小明和小张共同开发一个项目,小明定义一个aaa.js,小张定义了一个bbb.js。
aaa.js
1 | //小明开发 |
此时小明的sum是没有问题的。
bbb.js
1 | //小红 |
此时小明和小红各自用各自的flag你变量没问题。
但是此时小明又创建了一个mmm.js
1 | //小明 |
在index.html页面导入这些js文件
1 | <script src="aaa.js" ></script> |
此时小明知道自己在aaa.js中定义的flag是true,认为打印没有问题,但是不知道小红的bbb.js中也定义了flag为true,所以mmm.js文件并没有打印出“flag是true”。
这就是全局变量同名问题。
2. 使用导出全局变量模块解决全局变量同名问题
aaa.js
1 | //模块对象 |
mmm.js
1 | //小明 |
这样直接使用aaa.js导出的moduleA变量获取小明自己定义的flag。
3. CommonJS的模块化实现
CommonJS需要nodeJS的依支持。
aaa.js
1 | var name = '小明' |
使用module.exports = {}导出需要的对象。
mmm.js
1 | //导入对象,nodejs语法,需要node支持,从aaa.js取出对象 |
使用 var {flag,sum} = require("./aaa")获取已经导出的对象中自己所需要的对象。
4. ES6的模块化实现
如何实现模块化,在html中需要使用type='module'属性。
1 | <script src="aaa.js" type="module"></script> |
此时表示aaa.js是一个单独的模块,此模块是有作用域的。如果要使用aaa.js内的变量,需要在aaa.js中先导出变量,再在需要使用的地方导出变量。
4.1 直接导出
1 | export let name = '小明' |
使用
1 | import {name} from './aaa.js' |
./aaa.js表示aaa.js和mmm.js在同级目录。
如图打印结果。

4.2 统一导出
1 | var age = 22 |
使用
import {name,flag,sum} from './aaa.js'导入多个变量
1 | import {name,flag,sum} from './aaa.js' |
使用{}将需要的变量放置进去

4.3 导出函数/类
在aaa.js中添加
1 | //3.导出函数/类 |
在mmm.js中添加
1 | import {name,flag,sum,say,Person} from './aaa.js' |
如图

4.4 默认导入 export default
导出
1 | export default { |
导入
1 | //4.默认导入 export default |
注意:使用默认导出会将所有需要导出的变量打包成一个对象,此时导出一个对象,此时我在
mmm.js中导入变量时候命名为aaa,如果要调用变量需要使用aaa.变量。
4.5 统一全部导入
使用
import * as aaa from './aaa.js'统一全部导入
1 | // 5.统一全部导入 |









