作为程序员一定要保持良好的睡眠,才能好编程

RequireJs和自动打包

发布时间:2018-12-26


如何获取requireJS?

通过github来获取,去github上搜索 RequireJS 进行clone或 zip包下载使用



定义模块

difine来进行定义

define定义模块.png


引用模块

加载模块.png

require来进行加载



加载文件:

RequireJS以一个相对于baseUrl的地址来加载所有的代码。




requirejs引入jquery.zip







//定义一个helper模块
define('helper',['jquery'],function($){

    return {
        trim: function(str){
            return $.trim(str);
        }
    }

});


app.js
//加载helper

require(['helper'],function(helper){
    var str=helper.trim('  amd ');
    console.log(str);
});



引用:

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






配置baseUrl

在app.js上,添加
requirejs.config({
    baseUrl:'/js'
});

如果添加上了这句话引入从
<script data-main="/js/app/" src="/js/require.js"></script>

改成
<script src="/js/require.js"></script>
<script src="/js/app.js"></script>


RequireJS加载机制


加载模块.png


实现一个简单的demo


1、demo目录


demo1.png

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>我是默认页面</title>
    <link rel="stylesheet" type="text/css" href="css/basic.css">
</head>
<body>
    
    <div>
        
        我是一个居中话的模块 
        <h1>requireJS和自动打包</h1>
    </div>    
    
    <script src="js/require.js"></script> 
    <script src="js/app.js"></script>

</body>
</html>


require.js


app.js

//自动加载js下面需要的模块 BaseUrl
requirejs.config({
    baseUrl:'js'
});
require(['helper'],function(helper){
    var str=helper.trim('  amd ');
    console.log(str);
});

helper.js

define('helper',[],function(){

    return {
        trim: function(str){
            return 'helper:'+str;
        }
    }

});

/*

         模块名   依赖模块    方法实现
 define('helper',['jquery'],function(){
    
    return {
        trim: function(str){
            return 'helper:'+str;
        }
    }

});*/


basic.css

.text-center{
    text-align:center;
}


界面运行效果:


demorun.png

可以看到,helper: amd 了

demorun加载.png










相应配置:paths 与 baseUrl结合


我们把目录调整成:


css

js

 ./lib

      ./jquery.js

      ./require.js

helper.js

app.js



baseUrl:需要加载模块的地址


paths:配置与模块名不相关的模块



//自动加载js下面需要的模块 BaseUrl
requirejs.config({
    baseUrl:'js',
    paths:{
        'jquery':'./lib/jquery'
    }
});


requirejs.config({
    baseUrl:'js',
    paths:{
        'jquery':[
            ,//首先路径'https://cdn.bootcss.com/jquery/3.3.1/jquery.js',//如果加载不成功,则加载下面lib/jquery
            './lib/jquery'
        ]
    }
});


require(['helper'],function(helper){
    var str=helper.trim('  amd ');
    console.log(str);
});


paths 后面的引用,可以是 一个字符串路径,也可以是一个数组。


如果是数组,则默认引用第一个,第一个作为首选项,如果加载失败,则使用第二个。


注意事项:paths 后面所有的js 都不需要.js 这个后缀,否则引入不到




定义模块的方式


1、函数式定义


define('helper',['jquery'],function($){

    return {
        trim: function(str){
            return $.trim(str);
        }
    }

});

第一个函数,最佳实践:不写死模块名

define(['jquery'],function($){

    return {
        trim: function(str){
            return $.trim(str);
        }
    }

});


第二个参数:依赖的模块,可有可无

define(function($){

    return {
        trim: function(str){
           alert(str);
        }
    }

});




2、定义简单的对象

define({
    username:'james',
    name:'james song',
    email:'574482856@qq.com',
    gender:'boy'
});


下面我们通过一个案例说明一下:


通过点击一个按钮,获取相关信息并打印




userdefine.png

api.png


requireone.png


绑定#user的click 事件,打印出user中的信息。





针对不支持AMD插件的库应该怎么引入


不支持amd的模块.png


加载不支持AMD的库.png



shim.png


shim2.png




map设置,通过不同的require加载不同模块时,加载不同的文件

map版本.png

map版本2.png


引用:

map3.png

可以改成['./app/api2'] 通过map加载jquery的版本。


map中可以使用* ,只要有需要jquery的话,都是加载jquery。





加载js等待的时间:


waitSecond=7



urlArgs配置

urlArgs.png

用来干什么呢?控制版本号缓存

看看效果:

urlArgs2.png




传统jsonp与require中的jsonp:


requirejsop.png