requirejs的使用

requirejs解决了什么问题
  • 避免书写加载一大堆加载js文件的代码
  • 方便模块化开发
  • 防止js加载阻塞页面渲染
requirejs加载到页面后的变化

requirejs定义3个变量
* define: 用来定义 一个模块
* require: 用来加载模块
* reuirejs: requirejs===require,一般使用require

data-main的作用
<script data-main="js/main" src="js/require.js"></script>
  • 在加载完require.js后加载 js/main.js
  • 将js/目录设置成默认的js文件 查找 目录 ,下次在加载 的时候 ,不需要 书写
require的使用
加载文件
require('jquery'); //加载 一个文件 
require(['jquery','a']);//加载多个文件 ,传入一个数组
require(['jquery','a'],function($,a){
    //执行代码 
});//加载文件成功后的回调函数,函数参数的顺序与加载的文件顺序一致
require的参数说明
  • 参数1:传入要加载的js文件路径 ,或者 在require.config中定义的短模块名称,不需要.js后缀,多个文件 使用数组 的形式
  • 参数2:回调函数,函数可接收所加载 文件 的输出变量,次序与加载 的文件次序一致
requirejs的全局配置,require.config()
参数

传入一个配置的 json串,常用 的属性有:
* paths: 设置短模块 名
* shim: 加载 非AMD规范的模块
PS:AMD规范全称 Asynchronous Module Definition,即异步模块加载机制
AMD规范简单到只有一个API,即define函数:
define([module-name?], [array-of-dependencies?], [module-factory-or-object]);

参数解析
require.config({
    paths:{
        'jquery': '../vendor/jquery/dist/jquery.min',
        'bootstrap': '../vendor/bootstrap/dist/js/bootstrap.min',
        'moment':'../vendor/moment/min/moment-with-locales.min',
        'angular': '../vendor/angular/angular.min',
    },
    shim: {
        "angular" : {
            exports : "angular";//输出 的模块 名称 
        },
        "jquery.form" : {
            deps : ["jquery"]//将该插件垫到jquery中
        }
        "jquery.form" : ["jquery"]//上面形式的简写版本
    }
})

paths下定义了种模块 的短名称

模块的定义 ,define()
define([module-name?], [array-of-dependencies?], [module-factory-or-object]);
参数说明
  • module-name: 模块标识,可以省略。
    这个名称的格式是相对于 baseUrl 的路径除去文件格式,比如 baseUrl 为 js 目录,一个模块放在 js/libs/hi.js 里,则如果名称是这样定义的:
define('libs/hi', ['jquery'], function($){......});
  • array-of-dependencies: 所依赖的模块,可以省略。
  • module-factory-or-object: 模块的实现,或者一个JavaScript对象。
返回格式
  • 一个对象
  • 一个函数
常见的写法

返回 对象

//直接返回一个对象 
define({
    name: "john",
    age : 20,
    sex : "femal"
});
//函数形式返回一个对象 
define(function () {
    //Do setup work here

    return {
        color: "black",
        size: "unisize"
    }
});
//存在依赖模块的形式,返回 一个对象 
define(["./cart", "./inventory"], function(cart, inventory) {
        //return an object to define the "my/shirt" module.
        return {
            color: "blue",
            size: "large",
            addToCart: function() {
                inventory.decrement(this);
                cart.add(this);
            }
        }
    }
);

返回函数

define(["my/cart", "my/inventory"],
    function(cart, inventory) {
        //return a function to define "foo/title".
        //It gets or sets the window title.
        return function(title) {
            return title ? (window.title = title) :
                   inventory.storeName + ' ' + cart.name;
        }
    }
);

简单包装commonjs定义 的模块 :

define(function(require, exports, module) {
        var a = require('a'),
            b = require('b');
        var c = function(a,b){
        }
        module.exports = c;
    }
);

参数说明:
require: requirejs对象
exports: 内置的输出 模块
module: 模块对象

JSONP服务依赖

将返回 的json串定义成define 模块

require(["http://example.com/api/data.json?callback=define"],
    function (data) {
        //The data object will be the API response for the
        //JSONP data call.
        console.log(data);
    }
);

在url中加callback=define参数
只支持json串,不支持其他 的格式
局限:
JSONP的这种用法应仅限于应用的初始化中。一旦JSONP服务超时,其他通过define()定义了的模块也可能得不得执行,错误处理不是十分健壮。

requirejs的应用

模块化开发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值