一、RequireJS概述

  RequireJS是一个工具库,主要用于客户端的模块管理。实现异步或动态加载,从而提高代码的性能和可维护性。

  RequireJS的基本思想是,通过define方法,将代码定义为模块;通过require方法,实现代码的模块加载。

  1.1define方法:定义模块

    define方法用于定义模块,RequireJS要求每个模块放在一个单独的文件里。

    按照是否是依赖其他模块,可以分成两种情况讨论。第一种情况是定义独立模块,即所定义的模块不依赖其他模块;第二种是定义非独立模块,即所定义的模块依赖于其他模块。

  1)独立模块

    如果被定义的模块是一个独立模块,不需要依赖任何其他模块,可以直接用define方法生成。

    

define({
method1 : function(){},
method2 : function(){}
});

  上面代码生成了一个拥有method1、method2两个方法的模块。

  另一种等价的方法是,把对象写成一个函数,该函数的返回值就是输出的模块。

  

define(function(){
return {
method1:function() {},
method2:function() {}
};
})

  后一种写法的自由度更高一点,可以在函数体内写一些模块初始化代码。

  值得指出的是,define定义的模块可以返回任何值,不限于对象。

2)非独立模块

  如果被定义的模块需要依赖其他模块,则define方法必须采用下面的格式。

  

define(['module1','module2'],function(m1,m2) {

.....

});

  define方法的第一个参数是一个数组,它的成员是当前模块所依赖的模块。define方法的第二个参数是一个函数,当前面数组的所有成员加载成功后,它将被调用。它的参数与数组的成员一一对应。

1.2require方法:调用模块

  require方法用于调用模块,它的参数与define方法类似。

  

require(['foo','bar'],function( foo, bar){

    foo.doSomething();
});

2.配置require.js: config方法

  require方法本身也是一个对象,它带有一个config方法,用来配置require.js运行参数。config方法接受一个对象作为参数。

  

require.config({
paths: {
jquery: [
'lib/jquery'
]
}
});

  config方法的参数对象有以下主要成员:

   1)paths

    paths参数指定各个模块的位置。这个位置可以是同一个服务器上的相对位置,也可以是外部网址。可以为每个模块定义多个位置,如果第一个加载失败,则加载第二位置。指定本地文件路径时,可以省略文件最后的js后缀名。

   2)baseUrl

    baseUrl参数指定本地模块位置的基准目录,即本地模块的路径是相对于哪个目录的。该属性通常由require.js加载时的data-main属性指定。

   3)shim

    有些库不是AMD兼容的,这个时候就需要指定shim属性的值。shim可以理解成“垫片”,用来帮助require.js加载非AMD规范的库。

    

require.config({
paths:{
"underscore":"vender/underscore"
},
shim: {
"underscore":{
exports:"_"
}
}
});

3.插件

  requireJS允许使用插件,加载各种格式的数据。

4.优化器 r.js

  RequireJS提供一个基于node.js命令行工具r.js,用来压缩多个js文件。它的主要作用是将多个模块文件压缩合并成一个脚本文件,以减少网页的HTTP请求数。

以上为RequireJS大概理解,后期会更详细讲解requireJS在magento中的应用。

 Castle

Magento开发基础知识之RequireJs的更多相关文章

  1. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  2. iOS开发——总结篇&IOS开发基础知识

    IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断 ...

  3. Ext常用开发基础知识

    Ext常用开发基础知识 组件定义 //这种方法可以缓存所需要的组件 调用起来比较方便(方法一 ) Ext.define('MySecurity.view.home.HomePanel', { //添加 ...

  4. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  5. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  6. [No0000138]软件开发基础知识

    1. 本文目的 本文目的在于,介绍软件开发的各种基础知识 以实现,看了之后,对于软件开发的很多领域的基础知识有所了解 如此在进行后续的真正的软件开发时,遇到各种细节知识,才会明白由来和背景知识 第 1 ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  8. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  9. 3D开发基础知识和简单示例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

随机推荐

  1. SpringBoot项目中,AOP的使用

    Springboot中自带依赖 1.创建一个SellerAuthorizeAspect类,打上标签@Aspect和@Component @Aspect @Component @Slf4j public ...

  2. Class constructor FileManager cannot be invoked without 'new' in undefined (line undefined, column undefined)

    解决办法: 1.删除package.json属性devDependencies的 less 和 less-loader ; 2.重新安装 npm i less less-loader --save-d ...

  3. python环境下安装virtualenv,virtualenvwrapper

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  4. 设置iterm可配色

    设置终端和ls可配色 终端输入vim ~/.bash_profile 添加如下export #enables colorin the terminal bash shell export export ...

  5. 【Spark机器学习速成宝典】基础篇04数据类型(Python版)

    目录 Vector LabeledPoint Matrix 使用C4.5算法生成决策树 使用CART算法生成决策树 预剪枝和后剪枝 应用:遇到连续与缺失值怎么办? 多变量决策树 Python代码(sk ...

  6. 类组件(Class component)和函数式组件(Functional component)之间有何不同

    类组件不仅允许你使用更多额外的功能,如组件自身的状态和生命周期钩子,也能使组件直接访问 store 并维持状态当组件仅是接收 props,并将组件自身渲染到页面时,该组件就是一个 ‘无状态组件(sta ...

  7. leetcode-easy-string- 8 String to Integer (atoi)

    mycode  98.26% 易错点: while循环式,and判断的地方先判断下标会不会超出范围 class Solution(object): def myAtoi(self, str): &qu ...

  8. RF中BDD编写

    工程结构 用户关键字 测试用例 运行日志

  9. form 组件如何扩展user的字段

    第一步 先将一个包引进来 第二步创建一个类加入你想要的字段

  10. linux添加新用户

    使用root用户adduser yj 后面操作有提示 用这种方法新建的用户会在home下生成用户文件夹