浅谈前端模块化开发的四种方法

最近在了解前端模块化开发,接下来会把相关的笔记/心得分几片文章记录下来。

 一、为什么要模块化开发

  • js越多,依赖越强,灵活性越小(如引入顺序);
  • 多人开发,容易出现命名冲突等问题;
  • ... ...

二、解决方案:

  1. 匿名闭包;
    1. 解决了命名冲突;
    2. 代码复用性变弱;
  2. 使用模块作为出口;
    // 3.使用变量接收对象
    var myModule = (function(){
        // 1.在匿名函数内部定义一个对象;
        var obj = {};
        var sum = function(a,b){
            return a+b;
        }
        var flag = true;
        
        obj.sum = sum;
        obj.flag = flag;
        // 2.暴露对象;
        return obj;
    })();

    其他成引入该js就能直接使用属于自己模块的属性和方法:

    if(myModule.flag){
        console.log(myModule.sum(1,0));    
    }

     

  3. CommonJS

    1. 核心:导入,导出

    2. 导出示例:

      module.exports={
          flag: true,
           sum: function(a,b){
                return a+b;
          }
      }

       

    3. 导入示例:

      // 1.普通写法
      var someModule = require('./config.js');
      
      if(someModule.flag){
          someModule.sum(1,2);
      }
      
      // 2.解构赋值
      var {flag,sum} = require('./config.js');
      
      if(flag){
          sum(1,2);
      }

       

  4. ES6的模块化:export/import

    1. 导出示例:

      var flag = true;
      var sum = function(a,b){
          return a+b;
      }
      
      // 导出方式1:报错就写export default
      // export default导出有且只能有一个,导入的时候也变成了import from './config.js',也就是说名字可以省略,由导入者自己命名;
      export {flag,sum}
      
      // 默认导出函数,导入者不能省略名字,但是可以自己命名
      export default function(){
          console.log("export default function")
      }
      
      
      // 导出方式2:
      export var name = "wayne";
      export function mul(a,b){
          return a*b;
      }
      export class Person{
          run(){
              console.log("run away!")
          }
      }

       

    2. 导入示例:

      // 注意文件名简写的问题
      import {flag,sum, Person} from './config.js';
      
      if(flag){
          console.log(sum(1,2))
      }
      
      var p = new Person;
      p.run()
      
      
      // 导入的东西比较多的时候
      import * as 自定义命名 from './config.js'

       

其他小记:

<!-- type="module"属性会让js文件模块化,其他js文件不能访问其中的变量和方法 -->
<script src="./config.js" type="module"></script>

END;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值