学习require.js

331 阅读2分钟

require.js为了解决什么问题?AMD是什么

AMD就是按需加载模块

传统的页面中js的引用需要注意各个js之间的依赖关系,引入必须要有顺序。
require.js就相当于自己定义的插件库,当你引入一个插件的时候会自动的按顺序引入你要引入的库所
依赖的其他js再引入你需要的插件

require.js的使用

require(['util','ueditor'],function(u){u.content('哈哈哈')}) 

require.js会自动加载util模块和ueditor模块,
在加载这两个模块的同时也会按照书序引入所依赖的(打比方:如果依赖jquery.js和bootstrap.js也会按顺序自动引入它们),然后执行对应的function(u.editor){}函数 

require.js的库在哪里?怎么定义库?库里面的文件又怎么和前端资源建立关系?

一般都在项目中的lib文件夹下

在index.html页面载入一个require配置库页面(如main.js)

<meta charset = "UTF-8">
  <script data-main="../resource/main.js" src="../resource/require.js"></script>
</meta>

在main.js中配置需要用到的js库,main.js中配置后可以找到项目中对应css,js的关系。 

如何设置require.js的配置项main.js?

如果是一个非标准化的自定义模块如何在require.js中使用?

比如hd.js是一个非标准化定义的模块
funciton modal(){
 alert ('怎么在require.js中使用')
}
funciton success(){
  alert ('成功了哟!')
}

require.config({
    baseUrl:'../resource/app',//默认路劲
    paths:{//需要引入的库的路径
         'jquery':'../lib/jquery.min',
         'angular':'../lib/angular.min',
          'bootstrap':'../lib/bootstrap.min''css':'../lib/css.min'//依赖于css库
          },
    shim:{
      'bootstrap':{//定义每一个模块的依赖项
         'deps':['jquery','css!../css/bootstrap.min.css']        
       },
      'hd':{//定义非标准化的模块
           init:function(){
             return {
                modal:modal,
                success:success
                }
            }
       }
     }
})



配置项main.js是异步执行的,如果在页面中直接执行require(['util','ueditor'],function(u){u.content('哈哈哈')})会报错,
因为配置项在配置的同时也在调用回调函数function(u){u.content('哈哈哈')}) 解决办法:将回调函数放入函数中调用,如<script>
function test(){
    require(['util','ueditor'],function(u){u.content('哈哈哈')})
}
</script>

或者是将main.jsrequire.js后面引用
<meta charset = "UTF-8">
  <script src="../resource/require.js"></script>
  <script src="../resource/main.js"></script>
</meta>
<script>
require(['util','ueditor'],function(u){u.content('哈哈哈')})
</script>

require.js中如何自定义模块?例如自定义一个标准化的utils.js

>>>utils.js
define(['jquery'],function($){
 return {
   change:function(){
     $(body).css({backgroud:'red'})
   }
   show:function(){
         alert('hello!')
   },
   message:function(){
        alert('hello.css')
   }
  } 
})
***=========================================================================================***
或者使用
define([],function(){
 return {
   change:function(){
     require(['jquery',function(){//只有change方法需要引入jquery
        $(body).css({backgroud:'red'})
     }])
   }
   show:function(){
         alert('hello!')
   },
   message:function(){
        alert('hello.css')
   }
  } 
})