加载中...
JavaScript 模块化经历了从全局变量、IIFE、CommonJS、AMD 到 ES Modules 的演进,ES Modules 于 2015 年进入标准,现已成为浏览器与 Node.js 的统一模块格式。
| ES Modules 引入 | ECMAScript 2015 |
| Node.js 稳定支持 | v14.0.0,2020 年 4 月 |
| 关键优势 | 静态分析、Tree Shaking、原生浏览器支持 |
早期 JS 没有模块系统,开发者靠 IIFE 隔离作用域、靠全局命名空间约定(如 YUI.use)共享代码。2009 年 Node.js 采用 CommonJS(require/module.exports),适合服务端同步加载。浏览器端因网络延迟需要异步加载,RequireJS 推广的 AMD(Asynchronous Module Definition)格式兴起,但语法繁琐。2011 年 Browserify 让 CommonJS 跑在浏览器,2013 年 webpack 横空出世,将模块打包推上主流。[1]
ES2015 正式引入 import/export 静态语法,最大特点是静态分析:import 路径必须是字符串字面量,使 Tree Shaking(打包时消除未使用代码)成为可能。浏览器从 2017 年起陆续原生支持 ,Node.js 从 v12 起实验支持、v14 起稳定(使用 .mjs 扩展名或 package.json 中 "type": "module")。动态导入 import()(ES2020)支持按需懒加载,已成为大型应用代码分割的标准手段。
| ES Modules 引入 | ECMAScript 2015 |
| Node.js 稳定支持 | v14.0.0,2020 年 4 月 |
| 关键优势 | 静态分析、Tree Shaking、原生浏览器支持 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧