JavaScript 模块化的前世今生

我最早接触前端应该是在 2013 年左右,虽然那个时候还在读大二,但已经和同学开始折腾一些校园创业项目。当时希望开发一个面向校园的网上零食商城,我们从批发市场进货然后在校园内网上以低于「小卖部」的价格出售。由于人手不足,写后端的我也同时兼顾了前端的开发工作[1]

[1] 这种情况在读研甚至工作的时候也在不断发生,以至于现在我都怀疑自己的前端代码量可能快要超过后端代码量了。

虽然当时没有系统性的学习过前端,但得益于诸多开发者在网上分享和开源自己的前端组件,使得我在开发过程中能够随时使用现成组件,从而快速搭建出了系统的第一版。

海量的前端组件库为当时的开发带来了极大的便利,但也带来了一些困扰。这些组件很多时候需要使用 script 命令引入,例如:








在开发过程中,经常会遇到:

  • 引入的 .js 文件越来越多,越来越复杂
  • 上述 .js 文件引入顺序被不小心改变导致某个库不可用
  • 引入一个新的 .js 文件导致某个库不可用

随着使用的组件越来越多,引入的库越来越复杂,上面的问题反复出现,很多时候需要花很多时间去理清各个组件库的依赖,必要时更新库的版本、调整引入顺序,甚至修改组件内部的冲突代码才能使得页面正常运行。可以说当时我有大量的时间都花费在了这些不必要的调试上,最终导致我的前端开发初体验并不好,甚至可以说糟糕。

直到后面接触了 Node.js,我才意识到之前在浏览器端遇到的种种问题的根本原因是:模块化的缺失

模块化历史与演化

函数封装

朴实无华:全局函数写法

上面提及的通过 script 引入的 .js 文件通常都是第三方 UI 组件所需要的模块,这些模块内封装了对应的函数或功能,为的是提高程序的复用性和可维护性

那么该如何封装一个可被复用的模块?最为原始和简单的方式就是将公用函数放到一个 xxx.js 文件中:

/* utils.js */
function HandleDog() {
  // ...
}

function HandleCat() {
  // ...
}

使用时通过 script 语句导入皆可:


                    
                    

你可能感兴趣的:(JavaScript 模块化的前世今生)