没有行动,什么事都不会发生。
前言上一次写了篇《手写一个vite工具》,应读者的请求,这次简单的聊一下浏览器、ES规范、模块化、webpack和vite之间的关系。
通俗的讲:JS这门语言,在设计之处就没有模块体系,所以他会经历模块化演变,直到年,TC39(一群浏览器厂商代表组成的委员会)发布了ES6规范,ESModules才被世人所知,也就是ESM。而在模块化演变过程中,模块化本身暴露的问题也越来越明显。项目中的模块越来越多,在管理上造成了混乱,所以迫切需要一些工具解决各种模块类型混乱的问题。webpack和vite等工具就是用来解决这些问题的。
从浏览器的发展,JS的流行,到模块化探索,再到构建工具的区别,这里面涉及的知识点很多,在这里简单的列几点:
浏览器的运行机制
模块化的演变
模块化工具的演变
webpack的演变
vite的诞生
前端开发者的选择
浏览器与js浏览器在渲染页面前会解析HTML文档,通过HTML解析器输出DOM元素和属性。然后构建DOMtree和CSSOMtree。这两个模型构建时是相互独立的。最后CSSOMtree和DOMtree合并成渲染树,然后用于计算每个可见元素的布局,并输出绘制流程,将像素渲染到屏幕上。如果DOM或CSSOM被修改,需要重新构建,以确定哪些像素需要在屏幕上进行重新渲染,这里会涉及到两个知识点:repeat和reflow。而JS允许查询和修改DOM和CSSOM,同样JS也会阻塞DOM和CSSOM的构建和渲染,所以我们要把JS放在HTML的底部加载。现在的浏览器的内核大多分为两部分:渲染引擎和JS引擎。渲染引擎,负责对网页语法的解释并渲染网页。我们常说的gecko引擎、"斯巴阿"(edge)、presto引擎、webkit、blink引擎等都是渲染引擎。JS引擎,是专用于对JS进行解释、编译和执行,使网页达到动态得到效果。常说的V8引擎就是JS引擎。js与模块化在js模块化进程中,CommonJS常用在服务端,AMD、CMD规范常用在客户端。起初,CommonJS专攻服务端,原名叫ServerJS,后来,为了统一前后端而改名CommonJs。而就在社区讨论下一版规范的时候,内部发生了比较大的分歧,分裂出三个主张,渐渐的形成三个不同的派别:在现有CommonJs的基础上满足浏览器的需要,把现有模块化转化为适合浏览器端即可。制定了Modules/Transport(