阅读本文需要有一定的 ES6 基础。
ES6 模块是 ES6 中的一个非常重要的特性,它收集了多年来各种模块化的优点,解决了其间的差异化,并期望能最终形成一个大家共同遵守的规范。
关于 JS 的模块化历程,可以参考 这篇文章。
本文从 import
和 export
两部分对 ES6 模块做一个基础的介绍,这两部分内容也就是 ES6 模块的全部了。
import
来看一组现有的 import
语法:
1 | import defaultExport from "module-name"; |
以上代码来自 MDN 上面关于 import 的介绍。
import
是模块导入语句的关键字,通过指定具体的导入方式,可以进行相应模块的导入操作。
以下是逐条说明:
1 | // 导入默认模块 |
export
export
是模块导出语句的关键字,同样的,来看一组 export
的语法,代码来自 MDN 上面的 export:
1 | // 导出指定模块 |
一些说明
- 在进行
import
的时候,import { export } from "module-name";
中的{ export }
语法并不等同于对象的解构,这是import
专门的语法。 export
和export default
的区别是在后续进行引入的时候需要分别使用import { ... } from
和import ... from
进行操作。- 作为默认模块进行导出时,匿名函数和具名函数在导出之后并无区分。
- 导出后的模块,如果存在变量,该变量对外是不可变的。可以通过模块内置的方法进行改变。
大体上就是这些内容了,ES6 的模块化给编程领域尤其是前端开发这一块,带来非常大的便利。
由于市面上直接支持 ES6 模块的产品的覆盖率依然不够理想,所以需要通过一些转译工具进行转译之后再进行使用。
目前,本人主要工作是在进行微信小程序的开发,好在小程序现在的开发环境已经基本支持
import
和export
语法(除了export ... from
),所以可以放心无忧的进行现代化 ES6 代码的编写了。目前使用原生代码进行微信小程序的编写,感觉良好。至于wepy
和mpvue
之类的前瞻框架,由于未进行全面使用,所以不做过多评述。
在撰写本文的时候,参考了大量的资料,但是提笔的时候却又感觉很词穷,所以只是简单的做了一个代码层次的注释说明,更多的参考资料罗列如下,请诸君自行参阅。
参考资料与拓展阅读
- ECMAScript 6 modules: the final syntax
- import - JavaScript | MDN
- export - JavaScript | MDN
- Previewing ES6 Modules and more from ES2015, ES2016 and beyond
- ES6 In Depth: Modules
- ES modules: A cartoon deep-dive
- Exploring ES6 - 16. Modules
- eslint/espree - #43 - adds module import and export grammar
- tc39/proposal-export-default-from
- tc39/proposal-dynamic-import
- What do ES6 modules export?
- Understanding ES6 Modules
- CommonJS
- JavaScript Modules
- Choose ES6 modules Today!
- JavaScript Modules: A Beginner’s Guide
- History and Background of JavaScript Module Loaders
- JavaScript Module Pattern: In-Depth
<本文完>