前端工程化简史

2022-08-09 22:16:56 +08:00
 nanxiaobei

旧时代

以前,人们都是直接写 HTML 、CSS 、JS ,甚至不用编辑器,打开记事本直接写完保存就行。

在这个时代,是没有 "工程化" 这个东西的,JS 还跟它的名字一样,是个 "Script",对网页锦上添花。

这个时代的霸主是 jQuery ,因为简化了 DOM 操作写法、抹平了浏览器差异,所以被广泛使用,一直到现在。

为什么要 "工程化"?

随着 Web 2.0 兴起,网页从 "只读" 变成了 "可读写",承担的功能不断变多,之前简单的几行 JS 变成了一大堆 JS 文件。

同时,JS (ECMAScript) 语法在发展,很多新的语法出现,但用户的浏览器版本参差不齐,无法支持新语法,而开发者又想使用这些新语法。

如果在开发时直接写 JS 新语法,如何组织庞大的 JS 项目呢?

前端工程化就出现了。简单来说,"工程化" 就是为了抹平 "开发" 和 "运行" 的差异。

就像我们可以直接写汇编语言,但开发体验差,所以出现了各种高级语言来抹平 "开发" 和 "运行"。

我们也可以直接写 JS 旧语法,但开发体验差,所以出现了前端工程化来抹平 "开发" 和 "运行"。

webpack

webpack 自同时代的 grunt 、gulp (均已淘汰) 发展而来,在短短一两年内一统江湖,统治了 Vite 出现之前的前端工程化。

在 2021 年 Vite 出现之前,webpack 几乎就是前端工程化的代名词。

webpack 是一个工具,把自己写好的 JS 、CSS 等传入,webpack 会对其进行编译,并输出打包好的可直接在浏览器运行的文件。

理论上,webpack 可以处理任意格式的文件,只需要配合不同的 loader ,例如 babel-loader ,css-loader 等。

但 webpack 有一个显著的特点,就是 "慢",其在本地开发时,也会对所有文件进行编译。

而其实开发者的浏览器一般都是最新的,理论上已经支持了最新 JS 语法,那么这个 "将新语法转为旧语法" 的工作就是多余的。

Vite 正是基于这一点,提出了新的工程化思路。

Vite

Vite 并不是一个 "独立" 的工具,其相当于对现有工具的一个整合。

在本地开发时,Vite 使用 esbuild 打包 ( https://esbuild.github.io/),esbuild 使用 go 编写,比 JS 编写的工具更快,这是 Vite 可以显著提升本地开发速度的关键。

在构建项目时,Vite 使用 rollup 打包,对语法进行转换,用于抹平用户浏览器间的差异。

3514 次点击
所在节点    前端开发
28 条回复
hangbale
2022-08-10 10:39:09 +08:00
@wbrobot react ,vue 解决的问题是 dom 操作的复杂性,避免了手写一堆 dom 指令,用数据驱动 dom ,跟 jQuery 算是不相上下,毕竟 jQuery 依然活跃在世界上 70%的网站中。但是对前端来说,这个方案依然不够好,如果 HTML 支持可编程,或者有更好的跟 js 通信的方式,另外就是很多交互效果未来其实是可以让浏览器支持的,chrome 正在测试将任意 dom 变成 popup 的 api
wangxiaoaer
2022-08-10 10:57:14 +08:00
好久没关注前端,发现又有了 pnpm 、lenra 这种工具出来,看的脑壳疼。

借楼问一下,lenra 是用来管理多个软件包(模块)的项目,单是 pnpm 本身已经支持多模块项目了,二者结合有啥意义呢?
nanxiaobei
2022-08-10 11:01:09 +08:00
@wangxiaoaer 是指 lerna 吧,lerna 是最早的 monorepo 方案之一,现在已经不维护了也就是被淘汰了,可以认为过时了,建议用其它的
wangxiaoaer
2022-08-10 11:04:59 +08:00
@nanxiaobei 是 lerna 。 不维护了?我看 GitHub 的 commit 和 issue 都是近期的啊。 我是之前在本站看到一个 logto 的项目,看了下代码,发现是用的 pnpm+lerna 。
nanxiaobei
2022-08-10 11:06:34 +08:00
wangxiaoaer
2022-08-10 11:17:22 +08:00
@nanxiaobei 这明明就是换了个团队维护而已啊,咋特么就成了停止维护了,掘金竟然能容忍这种垃圾文章。
gausszhou
2022-08-16 09:26:03 +08:00
等等,jquery 一样可以用 webapck 和 vite 这些打包工具啊,这又不冲突
erwin985211
2022-08-18 15:11:20 +08:00
真有前端怀念 jQuery ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871785

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX