JavaScript中的module

1、CommonJS:运行时确定模块间的依赖关系

用于服务器,对象就是模块,输出的是值的缓存,不存在动态更新。

2、AMD:运行时确定模块间的依赖关系

用于浏览器中。

3、ES6的模块加载方案:设计思想是尽量静态化,使得编译时就能确定模块间的依赖关系,静态优化, 静态分析(例如宏和类型检验只能靠静态分析实现)

浏览器通用解决方案,模块不是对象。

export: 输出的是接口,不是值。

1
2
3
4
5
6
7
8
export 1;  // error
const a = 1;
export a; // error
export const a = 1; // ok

if(...){
export const a = 1; // error 块级作用域内无法做静态优化
}

import: 输入的是只读接口,编译阶段执行,在代码运行之前,所以不允许使用表达式和变量。Singleton 模式,多次加载只会执行一次import语句。

1
2
console.log(a)
import {a} from 'util'

export default: 本质上是输出了一个名字叫default的变量

export 与 import 复合写法

1
export { a, b } from 'util'  // 相当于对外转发了a,b这俩个接口,在当前模块中并没有导入这俩个变量。

UMD模块格式:

静态编译:

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×