前端模块化开发到底是什么?


前言

前端的模块化开发经过长时间的演变现在已经趋于稳定,但是模块化的演变过程对于前端开发者的学习来说也是十分重要的,所以我总结了模块化的演变过程和当下最流行的模块化方案的基本使用,希望大家能有所收获


模块化演变过程

  1. 基于文件的划分模块的方式

    <body>
      <script src="module-a.js"></script>
      <script src="module-b.js"></script>
      <script>
        // 命名冲突
        method1()
        // 模块成员可以被修改
        name = 'foo'
      </script>
    </body>
    
    // module-a.js
    var name = 'module-a'
    
    function method1 () {
         
      console.log(name + '#method1')
    }
    
    function method2 () {
         
      console.log(name + '#method2')
    }
    

    命名冲突,污染全局作用域,模块成员可以被修改,无法管理模块依赖关系;

  2. 命名空间方式

    每个模块只暴露一个全局对象,所有模块成员都挂载到这个对象中

    <body>
      <script src="module-a.js"></script>
      <script src="module-b.js"></script>
      <script>
        moduleA.method1()
        moduleB.method1()
        // 模块成员可以被修改
        moduleA.name = 'foo'
      </script>
    </body>
    
    // module-a.js
    
    var moduleA = {
         
      name: 'module-a',
    
      method1: function () {
         
        console.log(this.name + '#method1')
      },
    
      method2: function () {
         
        console.log(this.name + '#method2')
      }
    }
    

    通过命名空间的方式会减小命名冲突的可能,但是模块成员仍然可以被修改,仍然无法管理模块依赖关系;

  3. IIFE

    具体做法就是将每个模块成员都放在一个函数提供的私有作用域中。

    有了私有成员的概念,私有成员只能在模块成员内通过闭包的形式访问。

    对于管理模块依赖关系,可以利用自执行函数的参数声明去传入依赖的模块,这样可以很清晰的看见,当前模块依赖了哪些模块。

    <body>
      <!-- 引入jquery,这样在其他IIFE模块可以直接传入jQuery -->
      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"&g
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whoopsina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值