谈谈对前端组件化,模块化,工程化的理解

简介: 谈谈对前端组件化,模块化,工程化的理解

谈谈对前端组件化,模块化,工程化的理解

  • 说到前端都觉得入门很简单,上手快,只需要HTML,CSS,JavaScript就可以上手些项目了,或者在找一些特效,粘贴复制到项目,一个页面引入了大量的js效果,css样式,最后越堆越多,维护起来也麻烦。传统的项目已经满足不了需求了,现在前端生态很繁荣,各种框架,组件的出现,让前端发展很迅速,前端组件化,模块化的出现,让代码更加易维护,性能优化程度更高。

前端工程化

  • 工程化思想就是结构,样式和动作的分离,把重复的工作交给代码来处理,保证质量,统一标准化
  • 确定代码规划,统一代码检查,保证输出的代码标准一致。
  • 代码版本管理工具,git,svn.
  • 持续化集成/持续交付/自动化部署
  • webpack打包集成
  • 代码编译和代码质量管理

前端模块化

  • 前端模块化就像编写代码时,将功能封装在一个个独立的js模块内,然后相互引用,完成整个功能的搭建
  • JavaScript模块规范主要有CommonJS,AMD,CMD,以及es6模块化方案等
    ##### CommonJS

     - Node 应用由模块组成,采用 CommonJS 模块规范。每个文件就是一个模块,有自己的作用域
     1. 基本用法:
       - 暴露模块:module.exports = value或exports.xxx = value
       ```js
         var name = "张三";
         var userName = function (value) {
           return value + name;
         };
         module.exports.name = name;
         module.exports.userName = userName;
       ```
       - 引入模块:require(xxx),如果是第三方模块,xxx为模块名;如果是自定义模块,xxx为模块文件路径
       ```js
         var example = require('./info.js');
         console.log(example.name); // 5
         console.log(example.exports('vue'));
       ```
    
AMD
  -  AMD规范则是非同步加载模块,允许指定回调函数
  1. 基本用法
    - 定义暴露模块:
      ```js
        ddefine(['module1', 'module2'], function(m1, m2){
          return 模块
        })
      ```
    - 使用模块
      ```js
        require(['module1', 'module2'], function(m1, m2){
          使用m1/m2
        })
      ```
CMD
  -  CMD规范专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行。CMD规范整合了CommonJS和AMD规范的特点
  1. 基本用法 
    - 定义暴露模块
      ```js
        define(function(require, exports, module){
          exports.xxx = value
          module.exports = value
        })
      ```
    - 引入使用模块
      ```js
        define(function (require) {
          var m1 = require('./module1')
          m1.show()
        })
      ```
ES6模块化
  -  ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西
  1. 基本用法
    - 定义方法

      ```js
        var count = 0;
        var add = function (a, b) {
            return a + b;
        };
        export { count, add };
      ```
    - 使用方法
      ```js
        import { count, add } from './index.js';
        function test(ele) {
            ele.textContent = add(11 + count);
        }
      ```
  - 如上例所示,使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载
总结
- CommonJS规范主要用于服务端编程,加载模块是同步的,这并不适合在浏览器环境,因为同步意味着阻塞加载,浏览器资源是异步加载的
- AMD规范在浏览器环境中异步加载模块,而且可以并行加载多个模块
- CMD规范与AMD规范很相似,都用于浏览器编程,依赖就近,延迟执行,可以很容易在Node.js中运行。
- ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

组件化

  • 那什么是组件化呢?我们可以认为组件就是页面里的 UI 组件,一个页面可以由很多组件构成。例如一个后台管理系统页面,可能包含了 Header、Sidebar、Main 等各种组件。

2022920222018244.png

  • 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构:

components.7fbb3771.png

  • 一个组件又包含了 template(html)、script、style 三部分,其中 script、style 可以由一个或多个模块组成。这样界面功能复杂时候,组件化抽离,代码可以易扩展。易复用
  • 组件化思维的精髓是独立、完整、自由组合。以此为目标,尽可能把设计和开发中的元素独立化,使其具备完整的功能,通过自由组合来构成整个页面/产品。

    ##### 定于一个组件

    • 参考vue方式
    • 当使用构建步骤时,我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件 (简称 SFC):

        <script>
          export default {
            data() {
              return {
                count: 0
              }
            }
          }
          </script>
      
          <template>
            <button @click="count++">You clicked me {{ count }} times.</button>
          </template>
    • 使用组件

        <script>
          import ButtonCounter from './ButtonCounter.vue'
      
          export default {
            components: {
              ButtonCounter
            }
          }
          </script>
      
          <template>
            <h1>Here is a child component!</h1>
            <ButtonCounter />
          </template>

随着前端技术不断发展,只有不断的学习,巩固基础知识,不断尝试新技术,才能走的更远。

目录
相关文章
|
2月前
|
资源调度 前端开发 JavaScript
构建高效前端项目:现代包管理器与模块化的深度解析
【2月更文挑战第21天】 在当今快速演变的前端开发领域,高效的项目管理和代码组织已成为成功交付复杂Web应用的关键。本文将深入探讨现代前端包管理器如npm, yarn和pnpm的工作原理,以及它们如何与模块化编程实践(例如CommonJS、ES6模块)协同工作以优化开发流程。我们将剖析这些工具的内部机制,了解它们如何解决依赖冲突,提高安装速度,并保证项目的健壮性。同时,本文还将介绍模块化编程的最佳实践,包括代码拆分、重用和版本控制,帮助开发者构建可维护且性能卓越的前端项目。
|
13天前
|
移动开发 前端开发 测试技术
【Flutter前端技术开发专栏】Flutter中的组件化开发基础
【4月更文挑战第30天】Flutter作为热门的UI框架,以其声明式编程和高效性能深受开发者喜爱。本文聚焦Flutter的组件化开发,阐述组件化开发的代码复用、模块化、团队协作和测试便利等优势。在Flutter中,所有元素几乎都是组件,包括简单按钮到复杂布局。通过继承`StatelessWidget`或`StatefulWidget`创建自定义组件,如示例中的`CustomButton`。组件通过`build`方法构建,并可在其他组件中嵌套使用。理解并掌握组件的样式、布局及使用,对于提升Flutter开发技能至关重要。
【Flutter前端技术开发专栏】Flutter中的组件化开发基础
|
11天前
|
前端开发 JavaScript 安全
【Web 前端】怎么实现Module模块化?
【5月更文挑战第1天】【Web 前端】怎么实现Module模块化?
|
12天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
13天前
|
JavaScript 前端开发 开发者
【Web 前端】JS模块化有哪些?
【4月更文挑战第22天】【Web 前端】JS模块化有哪些?
|
14天前
|
JavaScript 算法 前端开发
【专栏】前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式
【4月更文挑战第29天】本文探讨了前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式。slot算法允许在组件中定义插槽位置,实现内容的灵活插入和复用,提高代码可读性和维护性。shadow DOM则通过封装DOM子树,实现样式和事件的隔离,增强组件独立性和安全性。这两种技术常应用于组件开发、页面布局和主题定制,但也面临兼容性、学习曲线和性能优化等挑战。理解并掌握它们能提升开发效率和用户体验。
|
1月前
|
前端开发 JavaScript 安全
前端模块化发展
前端模块化发展
|
2月前
|
前端开发 JavaScript 内存技术
Node-前端模块化
Node-前端模块化
23 0
Node-前端模块化
|
2月前
|
前端开发 JavaScript 测试技术
构建高效前端项目:模块化与组件化策略
【2月更文挑战第25天】 在现代网页开发中,随着用户对于网页性能和交互体验的期待不断提升,前端项目的复杂性也随之增加。为了应对这种复杂性并提高开发效率,本文将探讨模块化与组件化在前端项目中的应用策略。通过分析这两种方法的优势与适用场景,我们将揭示如何利用它们来优化项目结构,提升代码复用率,以及加快开发流程。
35 4
|
2月前
|
资源调度 前端开发 JavaScript
构建高效前端项目:模块化与组件化的最佳实践
【2月更文挑战第13天】在现代前端开发的浪潮中,模块化和组件化已经成为提升项目可维护性和开发效率的核心原则。本文深入探讨了如何通过合理的模块划分、组件设计以及工具选择来优化前端项目结构,同时确保代码的复用性和可测试性。我们将从理论出发,结合实例分析,为前端开发者提供一套行之有效的最佳实践指南。