前端模块化

require.js的使用的步骤

如何定义模块?如何引入模块?

​ 引入插件: script引入
定义插件: 用沙箱来定义插件

1-定义模块

​ 1- 每个模块都是一个单独js文件

​ 2- 每个模块必须有自己的独立的作用域

​ 定义模块的语法

​ 定义模块:
define(模块名称,[依赖项], function () {
//模块功能
//有导出项
return 导出项;
})

注意点:

​ 模块名称:模块名字 一般不写,建议使用匿名模块
​ 依赖项: 可选,这个模块的运行要依赖于其他模块
模块的导出项: 模块要暴露给外界使用数据

2-引入模块

​ 引入模块语法

​ require([模块路径(不需要.js)], function (接收导出项) {

​ //模块引入完成的回调函数

​ })

引入模块

    require(['./js/a'], function () {

    console.log('模块引入完成了');            

})
3-模块有导出项的情况

​ 在引入模块时,在回调函数中用形参来接受 模块导出的数据

require(['./js/b'], function (mb) {

    console.log(mb);

    mb.say();            

})
4-页面中有多个模块,且模块有导出项

​ 注意: 导出项形参的顺序必须和引入模块顺序一一对应

//模块a 模块b 模块c 都有导出项
require(['./js/a', './js/b', './js/c'], function (ma, mb, mc) {
    console.log(ma);            

    console.log(mb);

    console.log(mc);
})
优化
将没有导出项的模块,写在最后即可;
//a.js模块没有导出项,放在最后面
require(['./js/b', './js/c', './js/a'], function (mb, mc) {          
    console.log(mb);
    console.log(mc);            
})
模块有依赖项的情况

​ require([’./js/d’], function () {

​ })

模块的路径配置问题

1-如果没有对路径做任何设置,默认以当前文件的位置 去找模块 (以相对路径去找)

require(['./js/a', './js/b', './js/c']);

2-通过设置data-main属性 来设置模块公共路径(基础路径)

​ 最终路径 = data-main 路径 + 引入的路径

​ require([‘a’,‘b’, ‘c’], function () {})

<script src="require.js"></script>
<!-- <script src="./require.js" data-main="./js/one/two/three/"></script> -->
<script>
    // require(['./js/one/two/three/four/five/zidongqiaodaima',
    //          './js/one/two/three/six/seven/zidongzhaobug'], function () {})
    // require(['four/five/zidongqiaodaima',
    //          'six/seven/zidongzhaobug'], function () {})

    // require(['a', 'b'],function (){})

    //路径配置 : 可以将任何复杂路径和文件名都进行简化 
    require.config({
    baseUrl: './js/one/two/three/', //基础路径
    paths: {     //别名 
        //别名: 剩下的路径 
        code: 'four/five/zidongqiaodaima',
        bug: 'six/seven/zidongzhaobug'
        }
    });

    //别名的路径 = baseUrl + 别名对应的路径
    require(['code', 'bug'], function () {})

</script>

关于第三方插件模块化问题

​ 答:如果我们使用define()来定义模块,要使用require()进行引入

​ 实际工作中,一般插件都是第三方,而不是我们自己定义的

第三方插件是否支持模块化?

​ 如果第三方插件用define进行定义,就可以使用require引入

​ 目前: 主流插件都是支持模块化,但是有少数不支持模块(不支持模块插件,需要我们处理)

**支持模块化插件 和不支持模块化插件区别:**

​ 1-支持模块化的插件知道自己依赖项是谁? 在此模块执行之前,一定会先引入自己的依赖项;

​ 2-不支持模块化的插件,不知道自己的依赖项是谁, 当前自己引入完成后就会执行;

不支持模块化

  • 没有依赖项,没有导出项,require直接引入
  • 有依赖项,没有导出项
    • shim属性中进行配置
  • 有依赖项且有导出项
    • shim属性中进行配置
require.config({
  baseUrl: "/modules",
  paths: {
    xyz: "./buzhichiamddeyouyilaixiangdemokuai",
    jquery: "../jquery.min",
    abc: "./buzhichiamddeyoudaochuxiangdemokuai",

  },
  //require.js中可通过设置shim,让不支持模块化的第三方内容
  //和require.js能够实现更好的配合
  shim: {
    //配置xyz
    xyz: {
      //设置依赖项: jquery
      deps: ["jquery"]
    },
    //配置abc
    abc: {
      deps: ["jquery"],
      exports: "animate" //导出项名称
    }
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值