Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 深入系列

  • 专题系列

  • underscore系列

  • ES6系列

  • 模块化

    • 模块化
    • 模块导入 import
    • 模块导出 export
      • 一. 导出方式
        • 1. 命名导出
        • 2. 默认导出
      • 二. 特性规范
        • 1. 对应关系
        • 2. 模块顶层输出
    • 模块导入/导出的复合写法
    • 模块继承
    • 跨模块常量
    • 动态加载
  • 正则表达式

  • 单元测试

  • 微前端

  • 实用函数

  • Rollup

  • 解决方案

  • 《JavaScript》笔记
  • 模块化
Jamey
2022-03-06
目录

模块导出 export

# 模块导出 export

export 命令用于规定模块的对外接口

# 一. 导出方式

ECMAScript 规范中的模块化方案提供了两种导出模块的方式:

  • 命名导出(Named Exports)
  • 默认导出(Default Export)

# 1. 命名导出

在声明的变量前添加 export 关键字即可将相对应的变量输出。

导出前声明的值:

这种写法能在脚本底部清晰看到所有输出的模块,推荐。

const originModule = true;

export { originModule };
1
2
3

在导出时重命名:

同样使用 as 关键字,同一函数可以定义多个不同的变量名输出。

export { originModule as newModule };
export { originModule as smartModule };
1
2

声明后立即导出:

export var something = true;
export let anything = true;
export const nothing = true;
export function everything (){};
export class interesting = true;
1
2
3
4
5

# 2. 默认导出

默认导出让开发者无须知道源模块输出的模块名称即可完成导入。(默认导出的变量无法使用命名导入)

导出一个值作为源模块的默认导出:

export default something;
1

⚠️ 注意: 仅当源模块只有一个导出时,才建议使用此做法。

将默认和命名导出组合在同一个模块中是不好的做法,尽管它是规范允许的。

扩展:

本质上,export default 就是输出一个叫做 default 的变量或方法,然后系统允许你位它取任意名字。

所以,下面的写法是有效的。

  • 模块导出:
function add(x, y) {
  return x * y;
}

export { add as default };
// 等同于
// export default add;
1
2
3
4
5
6
7
  • 模块导入
import { default as foo } from 'modules';
// 等同于
// import foo from 'modules';
1
2
3

正是因为 export default 命令其实只是输出一个叫做 default 的变量,所以它后面不能跟变量声明语句。

# 二. 特性规范

# 1. 对应关系

需要特别注意的是,export 命令规定的是 对外的接口,必须与模块内部的变量建立一一对应关系。

// Error
export 1;

// Error
const foo = 1;
export foo;
1
2
3
4
5
6

如上两种写法都会报错,因为均会输出 1,而 1 只是一个值,并非对外的接口。

export var foo = 1;

var bar = 1;
export { bar };

var baz = 1;
export { baz as bat };
1
2
3
4
5
6
7

其它脚本可以通过这个接口,取到值 1。它们的实质是,在接口名与模块内部变量之间,建立了一一对应的关系。

同样的,函数和类必须遵守这种书写方法。

// Error
function foo(){};
export foo;

// Good
export function bar(){};

// Good
function baz(){};
export { baz };
1
2
3
4
5
6
7
8
9
10

另外,export 语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

# 2. 模块顶层输出

export 命令可以出现在模块的任何位置,只要处于模块顶层就可以。

如果处于块级作用域内,就会报错,import 命令也是如此。这是因为处于条件代码块之中,就没法做 静态优化 了,违背了 ES6 模块的设计初衷。

function foo() {
  export default 'bar';
  // SyntaxError
}

foo();
1
2
3
4
5
6
#JavaScript 模块化
上次更新: 2022/07/08, 18:18:02
模块导入 import
模块导入/导出的复合写法

← 模块导入 import 模块导入/导出的复合写法→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式