侧边栏壁纸
博主头像
lac博主等级

行动起来,活在当下

  • 累计撰写 66 篇文章
  • 累计创建 12 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

初识前端模块化思想

Hude
2023-09-16 / 0 评论 / 0 点赞 / 14 阅读 / 2721 字

模块化思想:

模块化思想是一种软件设计和开发方法,旨在将大型软件系统拆分为相互独立且可维护的小模块或组件。这些模块可以单独开发、测试、维护和扩展,同时可以通过定义明确的接口来实现模块之间的通信和协作。模块化思想有助于提高代码的可维护性、可重用性和可扩展性,同时降低了代码的复杂性

模块化的优点:

  1. 封装性:模块化允许将代码封装在独立的单元中,每个单元负责特定的功能或任务。这种封装有助于隐藏实现细节,并提供了一种清晰的界面,使其他模块可以与之交互而不需要了解内部细节。

  2. 复用性:模块化代码可以更容易地被重用。一旦你创建了一个模块,你可以在项目中的不同部分或不同项目中多次使用它,而无需重复编写相同的代码。

  3. 维护性:模块化代码更容易维护。每个模块都有自己的职责,当需要进行修改或修复时,你只需关注特定模块,而不需要触及整个应用程序。

  4. 可扩展性:通过添加新的模块或替换现有模块,你可以更容易地扩展应用程序的功能。这使得应用程序可以逐渐增长而不会导致整个系统的混乱。

  5. 协作性:模块化也有助于多人团队协作开发。不同开发人员可以独立地工作在不同的模块上,而不会造成冲突。

前端模块化

简述前端模块的历史进程:

无模块化时期

最早的前端开发中,是不存在模块化的思想的,更不存在类似模块化打包工具webpack和rollup等,这个时期被称为无模块化时期

命名空间规范的出现

随着前端技术的发展,前端工程大小随着日益增加的需求不断变大,因此出现了变量冲突和代码混乱等问题,为了解决这些问题,衍生出了命名空间规范,即通过全局对象来组织代码,以减少这些问题的发生,但仍然没有解决核心的代码臃肿、混乱问题。

AMD和CommonJS指定了前端模块化的标准

AMD(Asynchronous Module Definition)和CommonJS规范为前端模块化提供了明确的标准,其中AMD用于浏览器环境,而CommonJS用于nodejs环境

ES6模块化

ECMAScript 2015(ES6)引入了原生的模块系统,使用importexport关键字。这个标准化的模块系统为前端开发提供了一种统一的模块化解决方案,而不再依赖于第三方库或工具

总结,模块化其本质就是前端开发过程中,对臃肿、混乱代码的一种拆分机制,拆分是为了更精密的联系和处理臃肿、混乱的问题

前端打包工具(构建工具)

前面提到前端模块化本质是拆分,但拆分又会衍生一个问题,大量复杂代码被拆分为以文件为单位的模块,当项目愈发庞大又会在运行阶段产生另外一个问题:运行环境加载文件数量过于庞大导致的性能问题。因此为了解决这个问题,又衍生出一个前端打包工具的概念

总结来说,前端打包是为了在前端模块化开发完毕后,对程序员拆分的模块进行组合优化的过程,而前端打包工具就是处理这个过程的工具,目前主流的打包工具有:

  1. Webpack

    • Webpack是一个现代的JavaScript模块打包工具,它用于将多个模块打包成一个或多个输出文件(通常是一个JavaScript文件)。

    • Webpack不仅支持ES6模块,还支持CommonJS、AMD、UMD等模块系统,因此可以处理多种模块格式。

    • Webpack提供了许多功能,如代码拆分、懒加载、资源加载、插件系统等,用于构建现代前端应用程序。

  2. Rollup

    • Rollup是另一个JavaScript模块打包工具,与Webpack类似,但更专注于构建库和npm包。

    • Rollup的特点是能够生成更小、更精简的包,它可以进行“摇树优化”(Tree Shaking)以删除未使用的代码。

    • Rollup支持ES6模块,并且在打包时通常会将代码优化为ES6模块。

总结:

  1. 模块化的思想有助于我们提示代码的质量以及开发效率,因此前端领域初期衍生出AMD和CommonJS等模块化系统

  2. 由于模块化的思维对前端的帮助极大(这一点是因为前端不是一个单独的语言系统,他是几种语言的组合,因此项目稍大一些就会产生混乱的问题),因此在ES6中,被写入语言规范,成为原生支持模块化的语言。

  3. 模块化是面向的是开发者提供便利,并不能给浏览器带来性能提示,因为浏览器思考方式与人不同,因此又衍生出了Webpack和Rollup等打包工具(构建工具),旨在构建出更为优化和结构更适用于运行环境的文件

0

评论区