Hi Dai Gei Ho~ 我是Winnie~ 大家中秋节快乐。
这几天在看自己文章的时候发现 Vite 的背後核心篇 文章顺序好像那里怪怪的,总觉得既然Native ESM是主核心,顺序改成 Native ESM > esbuild > HMR 会不会比较好XD。
今天文章来到了第九篇,而此篇内容我们要介绍的是 之前一直反覆提到的 Native ESM,同时这也是介绍 Vite 背後核心 篇的最後一章。
其实在之前文章 微谈模组化历史与 前进Vite 章节中 ,我们就有稍微介绍 ESM,而此篇内容 主要会在再深入点来说说 ESM运作过程。
『ES6 Modules or JavaScript Modules』 简称ESM,是在 ES6 之後所出现的 模组正式规范,其中最大特点是可以在浏览器中使用import
与 export
语法,让浏览器来处理这些模组,而在支援度上 也获得 多数主流 浏览器认可(如下图)。
ESM 使用语法使用如下:
// banana.js 输出
exports const banana = 'banana'
// guava.js 引入
import { banana } from './banana'
使用注意:在输出function的 js中,一只档案中 只能有一个 export default
可以有多个 export
当我们使用 ESM 规范来开发时,一开始就是在 建构模组的依赖图,浏览器会透过 <script src="main.js" type="module">
找到 进入点 main.js ,浏览器 会根据 import的 url路径 (Module Specifier) 一层一层加载 模组档案,产生 模组依赖图
於是 根据 模组依赖图 将模组解析为 模组纪录,当 模组记录 被创建,就会被放到模组映射里。
接着 JS 引擎会创建一个 模组环境记录(Module Environment Record),里面会管理模组纪录的所有变数,为所有模组分配内存空间。模组环境变量会跟踪内存中的位置对应位置来导出,而在这阶段这些内存中的位置暂时还没有实际的值, 只有在最後一步 JS 引擎通过执行最上层程序码才会进行被填充实际的值。
综合以上 ESM 运作模式主要有3个流程:
以上就是今天的文章, 谢谢大家的阅读,如有问题欢迎大家的指教。
图片来源:https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/
ps,针对 ESM的运作模式这边 我觉得因为 一些专有名词不熟悉的部分 可能会解释的不够清楚,导致有些流程被省略了,所以如果大家有兴趣更深入了解 可以到上方图片来源的连结 观看更详细解释,谢谢。
<<: 连续 30 天 玩玩看 ProtoPie - Day 6
>>: 成为工具人应有的工具包-06 WirelessKeyView
这是我第一次参加铁人赛,如果内容有不清楚或有误欢迎大家指正,影片皆是我自学Unity并且规划的教学内...
自从系列文的第二篇开始把自己的程序经历写下来後,截至目前为止已经写了十余篇。但因为撰文的顺序没有特别...
ASP.NET网页切换导向及状态管理-趴水 今天来做做看 在网页输入资料後 按下按钮 可以将资料导向...
尽管夹层玻璃比钢化玻璃更安全,但价格更高。尽管如此,法规要求仍可能会影响各国安全玻璃的安装。而且,作...
今天要写service、serviceImpl两个部分, (1)第一部分,service新增oneM...