requireJs快速上手

简介

  • require.js的主要作用是模块化,规范化js,作为JavaScript脚本加载器,遵循AMD规范;
  • require.js中提供了优化器可以优化页面中的js脚本和css文件,以提高页面响应速度,减少http请求次数;
  • 可以通过引入一个<script src='require.js' data-main='main.js'></script>加载整个页面;

API中主要函数

  • define-该函数用于创建模板,每个模板拥有自己唯一的ID。define函数是全局函数,不需要使用requirejs命名空间;
  • require-该函数用于读取依赖。require函数是全局函数,不需要使用requirejs命名空间;
  • config-该函数用于配置require路径依赖等信息;

require.config主要参数

  • baseUrl-配置模块共同的根目录;
  • paths-配置引入模块地址;
  • shim-配置引入并没用使用requireJs的初始化函数的模块;
  • shim.xxx.deps-配置引入模块的依赖;
  • shim.xxx.exports-当外部引入没有使用requireJs需要暴露一个接口时使用;
  • shim.xxx.init-当外部引入没有使用requireJs并且需要多个变量暴露的时候使用;

实例:

require.config({
    baseUrl:'./public/js',
    path:{
        add:'add',
        shortCut:'shortCut',
        jquery:'jquery',
    },
    skim:{
        shortCut:{
            exports:'shortCut',
            deps:'jquery'
        },
        jquery:{
            exports:'jquery'    
        }    
    }  
})

代码实例

创建index.html并添加<script src="/path/to/require.js" data-main="/path/to/app/config.js"></script>创建入口,具体如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <div class="demo">defineDemo</div>
    <button id="button" class="come-on-click">来点一下</button>
</div>
</body>
<script src="js/require.js" data-main="main" type="text/javascript"></script>
</html>

这里我们需要再创建一个main.js作为整个页面的入口js,具体如图:

(function (global) {
    "use strict"
    require.config({

        paths: {

            add: "js/define/add",
            jquery:"js/jquery-3.3.1"

        },
        skim:{
            jquery:{exports:'jquery'}
        }

    });
    require(['add','jquery'],function (add,$) {
        debugger;
        var myAdd=add();
        alert(myAdd.getValue());
        alert(myAdd.getValue());
        var button=document.getElementById('button');
        button.addEventListener('click',function () {
            alert(myAdd.getValue());
            global.console.log('hello');
        });
        $('.demo').on('mouseenter',function () {
            alert('');
        })

    })

})(this)

编写引入的js,样例如下图:

define(function () {
    var add=function () {
        this.count=1;
    };
    add.prototype={
        getValue:function () {
            return this.count++;
        }
    }
    return function (){
     return new add();
    };
})

这里return的是一个单例的实例。也可以return new add()。

引入css

requireJs是用于引入js的,如果直接去引入css会报错,但我们可以通过引入插件来解决,如下为require-css.js

define(function () {
    if ("undefined" == typeof window) return {
        load: function (e, t, n) {
            n()
        }
    };
    var e = document.getElementsByTagName("head")[0],
        t = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0,
        n = !1, r = !0;
    t[1] || t[7] ? n = parseInt(t[1]) < 6 || parseInt(t[7]) <= 9 : t[2] || t[8] ? r = !1 : t[4] && (n = parseInt(t[4]) < 18);
    var o = {};
    o.pluginBuilder = "./css-builder";
    var a, i, s, l = function () {
        a = document.createElement("style"), e.appendChild(a), i = a.styleSheet || a.sheet
    }, u = 0, d = [], c = function (e) {
        u++, 32 == u && (l(), u = 0), i.addImport(e), a.onload = function () {
            f()
        }
    }, f = function () {
        s();
        var e = d.shift();
        return e ? (s = e[1], void c(e[0])) : void(s = null)
    }, h = function (e, t) {
        if (i && i.addImport || l(), i && i.addImport) s ? d.push([e, t]) : (c(e), s = t); else {
            a.textContent = '@import "' + e + '";';
            var n = setInterval(function () {
                try {
                    a.sheet.cssRules, clearInterval(n), t()
                } catch (e) {
                }
            }, 10)
        }
    }, p = function (t, n) {
        var o = document.createElement("link");
        if (o.type = "text/css", o.rel = "stylesheet", r) o.onload = function () {
            o.onload = function () {
            }, setTimeout(n, 7)
        }; else var a = setInterval(function () {
            for (var e = 0; e < document.styleSheets.length; e++) {
                var t = document.styleSheets[e];
                if (t.href == o.href) return clearInterval(a), n()
            }
        }, 10);
        o.href = t, e.appendChild(o)
    };
    return o.normalize = function (e, t) {
        return ".css" == e.substr(e.length - 4, 4) && (e = e.substr(0, e.length - 4)), t(e)
    }, o.load = function (e, t, r) {
        (n ? h : p)(t.toUrl(e + ".css"), r)
    }, o
});

首先和其他js一样的引入require-css.js,并对其进行命名,注意命名不要为css,Css、requireCss等等均可;

 require.config({

        paths: {

            add: "js/define/add",
            jquery:"js/jquery-3.3.1",
            requireCss:'js/define/require-css'
        },
        skim:{
            jquery:{exports:'jquery'}
        }

});

之后通过require函数引入,不过有点不同的是需要加前缀,前缀为刚刚命名加!,即Css!、requireCss!。

    require(['requireCss!cssDemo']);

现在我们可以愉快的体验css了。

最后提示一下,define函数完全可以替代掉require函数,但是为了语义化一般不这么做,define就是用来创建模板,require就是用来引入并且关联。

猜你喜欢

转载自blog.csdn.net/Qin_Shuo/article/details/82012837