模块化
简介
ES Modules (ESM) 是 JavaScript 官方的标准化模块系统。提供了模块化的方式组织变量和函数。
背景
JavaScript 原生的变量管理方式是基于作用域的,不同的作用域之间需要共享变量,需要提升变量的作用域,比如使用 JQuery 组件时,一定要保证组件被导入之前导入 JQuery 否则会出现未定义变量使用的问题。这种依赖是不透明的,面对复杂的组件依赖关系,导入顺序让人头疼。其次,由于变量在全局作用域中,意味着可以被随处改变,有可能被恶意代码攻击,或者被意外改变出现无法预期的问题。最初的脚本小而简单,这些问题不会显露,但随着语言的发展,代码变得越来越复杂,问题便暴露了。
为了解决这个问题社区用了很多方法来把代码组织成模块,历史上出现过很多,下面列举一些:
- AMD —— 最古早的模块系统,由 require.js 实现;
- CommonJS —— 为 Node.js 服务器实现的模块系统;
- UMD —— 兼容以上两者的模块系统;
2015 年提出的 ES6 标准中,提出了 语言级的模块系统,现已被所有主流浏览器和 Node.js 支持。