2.1.1 用法
import有两种模块导入方式:命名式导入(名称导入)和默认导入(定义式导入),以及 import()。
import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";
复制代码
name-从将要导入模块中收到的导出值的名称
member, memberN-从导出模块,导入指定名称的多个成员
defaultMember-从导出模块,导入默认导出成员
alias, aliasN-别名,对指定导入成员进行的重命名
module-name-要导入的模块。是一个文件名
as-重命名导入成员名称(“标识符”)
from-从已经存在的模块、脚本文件等导入
import()
import()返回一个 Promise 对象。
// 报错
if (x === 2) {
import MyModual from './myModual';
}
复制代码引擎处理import语句是在编译时,这时不会去分析或执行if语句,所以import语句放在if代码块之中毫无意义,因此会报句法错误,而不是执行时错误。没办法像require样根据条件动态加载。
于是提案引入import()函数,编译时分析if语句,完成动态加载。
if(x === 2){
import('myModual').then((MyModual)=>{
new MyModual();
})
}
复制代码2.2.1 模块写法
export有两种模块导出方式:命名式导出(名称导出)和默认导出(定义式导出),命名式导出每个模块可以多个,而默认导出每个模块仅一个。
export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
复制代码
name1… nameN-导出的“标识符”。导出后,可以通过这个“标识符”在另一个模块中使用* import引用
default-设置模块的默认导出。设置后import不通过“标识符”而直接引用默认导入
-继承模块并导出继承模块所有的方法和属性
as-重命名导出“标识符”
from-从已经存在的模块、脚本文件…导出