什么是模块化?就是将一个复杂的程序根据一定的规则(规范)封装成几个文件,并进行组合在一起,这些单独的文件就模块化。
模块化能够做到什么:
- 避免命名冲突,减少命名空间污染
- 更好的分离不同功能的代码,按需加载
- 更高的复用性和更好的维护性
commonjs
- 暴露模块:暴露的是一个exports对象
- 方式1:module.exports = value
- 方式2:exports.属性名 = value
- 引入模块:
- 方式:require('xxx')。
- 引入的如果是第三方包,则xxx为第三方模块名。
- 如果引入的是自定模块,则xxx为文件路径
- 语法:let 变量名 = require('包名或文件路径'),这时变量保存的就是一个对象
- 方式:require('xxx')。
ES6
需要打包工具处理成浏览器识别的代码 bable:该包可以将ES6语法转义成ES6模块
- 暴露模块:export
// 暴露的语法1
// 在同一个文件中分别暴露每一个成员
export function fun(){}
export function fun1(){}
// 暴露的语法2
// 将要暴露的成员存入一个对象中暴露
function fun(){}
function fun1(){}
exprot {fun, fun1}
// 上面两种暴露方式,在引入模块时,要使用结构赋值的方式引入使用,就是要使用哪个成员再解构哪个成员使用即可,语法:
import {fun, fun1} from '文件路径'
// 暴露的语法3 默认暴露,在同一个文件中 export default 只能有一个
export default value(任意数据)
// 默认暴露的引入方式
// 一般为自定义模块的文件名,且首字母大写,保存的是一个对象,可以通过 .属性名访问对象的属性或方法
import xxx from '文件路径'
- 引入模块:import xxx from 'yyy'
- 自定义模块:yyy为文件路径,xxx,一般为自定义模块的文件名,且首字母大写,保存的是一个对象,可以通过 .属性名 访问引入成员的属性或方法
- 引入第三方包,则 xxx 一般为第三方模块的名称,yyy为npm下载的包名