美文网首页我爱编程
js模块化编程库require.js

js模块化编程库require.js

作者: 纳米君 | 来源:发表于2017-08-21 00:53 被阅读37次

    最近在做微信端系统,用到了该库。自己学习记录一下~

    首先做WEB网页,我们引文件经常是这么写的:

    <script type="text/javascript" src="a.js"></script>
    <script type="text/javascript" src="b.js"></script>
    <script type="text/javascript" src="c.js"></script>
    <script type="text/javascript" src="d.js"></script>
    

    使用require.js库就是防止这种写法,其优点如下:
    1.防止js加载阻塞页面渲染,避免网页失去响应;
    2.管理模块之间的依赖性,便于代码维护;

    为了避免网页可能失去响应,在网页底部加载

    <script src="js/require.js" data-main="js/main"></script>
    

    data-main属性的作用:指定网页程序的主模块。上例中,主模块就是js目录下的main.js,
    它会第一个被require.js加载。
    注:require.js默认文件后缀名是js,所以main.js简写成main

    主模块的写法:

    // main.js
    require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
      // some code here
    });
    

    require()函数接受两个参数:
    第一个是数组,表示所依赖的模块;
    第二个是回调函数,当模块全部加载成功后,它将被调用。
    加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。

    require.config()方法:

    写在主模块(main.js)的头部
    模块指定具体路径:

    require.config({
      paths: {
          "jquery": ".../.../jquery.min",
          "underscore": ".../.../underscore.min"
      }
    });
    

    也可以直接改变基目录baseUrl:

    require.config({
        baseUrl: ".../...",
        paths: {
            "jquery": "jquery.min",
            "underscore": "underscore.min"
        }
    });
    

    还可以指定它的网址:如果远程加载失败,就加载本地的库

    require.config({
      paths: {
          "jquery": ["https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min",".../.../jquery.min"]
      }
    });
    

    主模块加载其他模块:

    require(['jquery', 'underscore'], function ($, _){
      // some code here
    });
    

    AMD模块的写法:

    require.js加载的模块,采用AMD规范。就是模块必须采用define()函数来定义。
    如果一个模块不依赖其他模块,那么可以直接定义在define函数中。
    比如:

    //math.js
    define(function (){
      var add = function (x,y){
        return x+y;
      };
    
      return {
        add: add
      };
    })
    

    main.js中加载如下:

    require(["math"],function(math){
      alert(math.add(1,2));
    })
    

    如果math模块还依赖其他模块,那么define函数第一个参数必须是一个数组,定义如下:

    //math.js
    define(["myModule"],function(myModule){
    
    function out(){
      myModule.doSth();
    }
    
    return{
        out: out
    }
    })
    
    require(["math"],function(math){
      alert(math.out());
    })
    
    加载非AMD规范的模块:要先在require.config()方法定义它们的一些特征。

    比如:underscore和backbone这两个库,都没有采用AMD规范编写。

    require.config({
      shim: {
        'underscore':{
            exports: '_'
        },
        'backbone':{
            deps: ['underscore','jquery'],
            exports: 'Backbone'
        }
      }
    });
    
    shim专门用来配置不兼容的模块。
    exports的值:表明这个模块外部调用时的名称
    deps数组:表明该模块的依赖性

    比如jquery的插件可以这样定义:

    shim: {
      'jquery.scroll': {
          deps: ['jquery'],
          exports: 'jQuery.fn.scroll'
      }
    }
    

    require.js的插件

    plugins.png
    1. text.js用于异步加载文本资源,如txt、css、html、xml等。

    配置:

    paths: {
       text:'../require/text'
    }
    

    使用:

    require(['text!../css/a.css','text!../templates/a.html'], function (aCss,aHtml){
        //TODO
    });
    
    2. domReady.js,顾名思义,dom加载完毕需要做什么...
    require(['domReady!'],function (doc) {
      //本函数会在DOM ready时调用。
      //注意'domReady!'的值为当前的document
    });
    
    3. i18n.js,国际化

    以上。

    相关文章

      网友评论

        本文标题:js模块化编程库require.js

        本文链接:https://www.haomeiwen.com/subject/fjaxlxtx.html