精读 js 模块化发展( 二 )


(2015): 就是我们现在的模块化方案,还没有被浏览器实现,大部分项目已通过 babel 或提前体验 。
3 精读
本次提出独到观点的同学有:流形,黄子毅,苏里约,,杨森,淡苍,留影,精读由此归纳 。
从语言层面到文件层面的模块化
从 1999 年开始,模块化探索都是基于语言层面的优化,真正的革命从 2009 年的引入开始,前端开始大量使用预编译 。
这篇文章所提供的模块化历史的方案都是逻辑模块化,从方案开始前端把服务端的解决方案搬过来之后,算是看到标准物理与逻辑统一的模块化 。但之后前端工程不得不引入模块化构建这一步 。正是这一步给前端开发无疑带来了诸多的不便,尤其是现在我们开发过程中经常为了优化这个工具带了很多额外的成本 。
从之前其实都只是封装,并没有一套模块化规范,这个就有些像类与包的概念 。我在10年左右用的最多的还是 YUI2,YUI2 是用来做模块化的,但有很多问题没有解决,比如多版本共存,因此后来 YUI3 出来了 。
YUI().use('node', 'event', function (Y) {// The Node and Event modules are loaded and ready to use.// Your code goes here!});
YUI3 的像极了差不多同时出现的 AMD 规范,但早期 yahoo 在前端圈的影响力还是很大的,而到 2011 年才诞生,因此圈子不是用着 YUI 要不就自己封装一套,内部使用。
为什么模块化方案这么晚才成型,可能早期应用的复杂度都在后端,前端都是非常简单逻辑 。后来 Ajax 火了之后,web app 概念的开始流行,前端的复杂度也呈指数级上涨,到今天几乎和后端接近一个量级 。工程发展到一定阶段,要出现的必然会出现 。
前端三剑客的模块化展望
从 js 模块化发展史,我们还看到了 css html 模块化方面的严重落后,如今依赖编译工具的模块化增强在未来会被标准所替代 。
原生支持的模块化,解决 html 与 css 模块化问题正是以后的方向 。
再回到 JS 模块化这个主题,开头也说到是为了构建 scope,实则提供了业务规范标准的输入输出的方式 。但文章中的 JS 的模块化还不等于前端工程的模块化,Web 界面是由 HTML、CSS 和 JS 三种语言实现,不论是还是 AMD 包括之后的方案都无法解决 CSS 与 HTML 模块化的问题 。
对于 CSS 本身它就是scope,因此开发样式可以说是喜忧参半 。近几年也涌现把 HTML、CSS 和 JS 合并作模块化的方案,其中 react/css- 和 vue 都为人熟知 。当然,这一点还是非常依赖于 / 等构建工具,让我们意识到在端还有很多本质的问题需要推进 。
对于 css 模块化,目前不依赖预编译的方式是 -,通过 js 动态创建 class 。而目前 css 也引入了与 js 通信的机制 与 原生变量支持 。未来 css 模块化也很可能是运行时的,所以目前比较看好 - 的方向 。
对于 html 模块化,小尤最近爆出与小组调研 html,如果 html 得到了浏览器,编辑器的模块化支持,未来可能会取代 jsx 成为最强大的模块化、模板语言 。
【精读 js 模块化发展】对于 js 模块化,最近出现的