ECMAScript6 模块的用法


很长时间来,我都记不住模块的 exportimport 的组合用法,希望烂笔头能有好记性。

模块的一些基本特性

  • 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用 export 关键字输出该变量;
  • 一个模块的导出,是对外提供一个接口,如果直接提供值,则会报错,提供接口简单来说就是用花括号包起来,或者直接在前面加上 export || export default 前缀;
  • export 语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值;
  • import 命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面,改写接口;例如引入了a变量,不允许将a赋值=123
  • 由于 import 是静态执行(可进行静态检查),所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构;
  • export default 命令其实只是输出一个叫做 default 的变量,后面紧跟的 a 变量等于将 a 赋值给 default 变量,所以它后面不能跟变量声明语句。

独立导出范例

// output.js 导出部分的js文件
let viewer = null
function add(a,b) {return a+b}
export { viewer, add }

// import.js 导入部分的文件
import { viewer, add } from "./output.js"

默认导出范例(1)

// output.js 导出部分的js文件
export default function add(a,b) {return a+b}

// import.js 导入部分的文件
import add from "./output.js"
add(1,1) // 2

默认导出范例(2)

// output.js 导出部分的js文件
let a = 4
export default a  // export default 命令其实只是输出一个叫做 default 的变量,后面紧跟的 a 变量等于将 a 赋值给 default 变量,所以它后面不能跟变量声明语句

// import.js 导入部分的文件
import a from "./output.js"
console.log(a) // 4

直接执行范例

import "lodash"   // 会执行所加载的模块

整体加载范例

// output.js 导出部分的js文件
let viewer = null
function add(a,b) {return a+b}
export { viewer, add }

// import.js 导入部分的文件
import * as output from "./output.js"  // output 对象中不包含 export default 输出的内容
output.add(1,1) // 2

常量组织范例

// 常量独立文件
// constants/db.js
export const db = {
  admin_username: 'admin',
  admin_password: 'admin password'
};

// constants/user.js
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];

// 将这些文件输出的常量,合并在index.js里面。

// constants/index.js
export {db} from './db';
export {users} from './users';

// 使用的时候,直接加载index.js就可以了

// script.js
import {db, users} from './constants/index';

相关