ES6模块加载
Posted itly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6模块加载相关的知识,希望对你有一定的参考价值。
两种加载方式
加载方式
规范
命令
特点
运行时加载
CommonJS/AMD
require
社区方案,提供了服务器/浏览器的模块加载方案
非语言层面的标准
只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
编译时加载
ESMAScript6+
import
语言规格层面支持模块功能
支持编译时静态分析,便于JS引入宏和类型检验
动态绑定
export命令
定义
export命令用于规定模块的对外接口
输出变量
1. 单个输出
// profile.js
export var firstName = \'Michael\';
export var lastName = \'Jackson\';
export var year = 1958;
2. 批量输出
// profile.js
var firstName = \'Michael\';
var lastName = \'Jackson\';
var year = 1958;
export {firstName, lastName, year};
3. 重命名
var n = 1;
export {n as m};
4. 动态绑定
export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。
export var foo = \'bar\';
setTimeout(() => foo = \'baz\', 500);
上面代码输出变量foo,值为bar,500毫秒之后变成baz。
输出函数
1. 单个输出
a) 方式一
export function multiply(x, y) {
return x * y;
};
b) 方式二
function f() {}
export {f};
2. 批量输出
function v1() { ... }
function v2() { ... }
export {v1,v2}
3. 重命名
function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
重命名后,v2可以用不同的名字输出两次。
输出类
export default
import命令
定义
使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。
导入变量
1. 批量导入
import命令接受一个对象(用大括号表示),里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。
import {firstName, lastName, year} from \'./profile\';
2. 重命名
import { lastName as surname } from \'./profile\';
提升
import命令具有提升效果,会提升到整个模块的头部,首先执行
foo();
import { foo } from \'my_module\';
上面的代码不会报错,因为import的执行早于foo的调用。
执行
import语句会执行所加载的模块,因此可以有下面的写法。
import \'lodash\';
上面代码仅仅执行lodash模块,但是不输入任何值
小结
1. import命令导入的对象可能是一个变量,也可能是一个函数,或者一个类,要视具体情况而定。
2. import与require的差异较大,最大不要混用。要尽可能的使用import.
以上是关于ES6模块加载的主要内容,如果未能解决你的问题,请参考以下文章
ES6的模块加载器也能加载资产吗(html/css/...)
如何使用 es6 导入加载 emscripten 生成的模块?