一、requirejs存在的意义:

我们引用外部JS文件通常是这样引用的:

<script src="1.js"></script>
<script src="2.js"></script>
<script src="3.js"></script>
<script src="4.js"></script>
<script src="5.js"></script>
<script src="6.js"></script>

这种方式的弊端在于

  • 1、加载文件是同步加载,即加载完 1.js,再去加载2.js;导致加载时间过长;
  • 2、有些文件不一定需要加载;要根据内容具体内容决定加载哪些文件,传统方式会导致加载无用文件;

  而requirejs则可以解决这些问题。requirejs对外开放的接口:

  • 1、requirejs/require:  requirejs=== require ,用来配置requirejs;在入口模块中加载其他模块。
  • 2、define: 定义一个非入口模块。

requirejs的使用流程:

  • 1、利用define函数定义模块;
  • 2、引用requirejs文件;并通过 data-main 属性指定入口模块,requirejs自动加载入口模块;
  • 2、在入口模块(主模块)中利用require函数加载其他模块。

二、requirejs文件的引用:

  1、在html中引用的方式如下:

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

  如上, 在<script>标签中不仅指定加载的 require.min.js 文件,还指定了 data-main 属性;

  2、data-main

  data-main 不是<script> 标签的属性,是 requirejs 要求提供的属性;其用于指定入口模块文件,模块文件实际就是一个js文件,只是按照requirejs要求的格式来写。

  在这里表示在加载完 require.min.js 文件后马上加载 JS 目录下的 main.js 文件。 因为在requirejs 就是用于管理JS文件的,所以默认模块后缀名就是 ".js",因此data-main="js/main" 等价于 data-main="js/main.js"  但是我们最好不要加上后缀名,这个后续会说。

三、定义入口模块:

1、关于入口模块:

入口模块就是引用外部js的入口,一个模块可以依赖其他模块;例如上面的 main.js 入口模块文件书写格式为:

require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
    // some code
});

整个文件内容就是一个 require 函数,参数如下:

  • 第一个参数为数组,表示依赖的模块,如 'moduleA' 表示 模块名,在此也表示 moduleA.js 文件。
  • 第二个参数为方法,表示加载完依赖模块之后所执行的方法。每一个依赖的模块都可以传递一个任意类型的参数给当前模块的回调函数;

require函数的作用就是载入其他的模块,并且根据模块返回值作为回调函数的参数;require函数在执行加载依赖模块时,采用异步加载。不会阻塞当前页面的执行。

四、定义其他模块:

使用requirejs时,除了入口模块,还有很多被入口模块所依赖的其他模块,所不同的是入口模块采用require函数定义,其他模块采用define函数定义:

例如 moduleA.js 文件格式如下:

define(["cart"], function(cart) {
return {
color: "blue",
size: "large",
addToCart: function() {
inventory.decrement(this);
cart.add(this);
}
}
}
);

  普通模块的定义方式通常是采用 define 函数定义的,其参数如下:

  • 1、数组参数:依赖的其他模块;
  • 2、方法,方法内返回一个object,作为一个参数传给入口模块。

五、requirejs配置信息:

通常 require.config()就写在主模块(main.js)的头部,其作用域是全局的,对所有模块都有影响。格式 如下:

requirejs.config({
baseUrl: 'js/lib',
paths: {
app: '../app'
}
}); requirejs(['jquery', 'canvas', 'app/sub'],function ($,canvas,sub) {
//some code
});

由于requirejs===require 所以上述代码可以改成如下:

require.config({
baseUrl: 'js/lib',
paths: {
app: '../app'
}
}); require(['jquery', 'canvas', 'app/sub'],function ($,canvas,sub) {
//some code
});

requirejs是通过使用 require.config() 方法来定义配置信息的。以一个对象为参数,对象主要包括以下信息:

1、baseUrl:所有模块的查找根路径

如:require(['jquery','canvas','app/sub'],function($,canvas,sub) {//some code});中jquery表示的是 js/lib 目录下的jquery模块,即 jquery.js文件。

2、paths:就是一个对象,这个对象的paths属性指定各个模块的加载路径。该路径如果不是以 "/"或者"http"、"https" 开头则其路径是相对于baseUrl而言的,如果没有baseUrl,则是相对于data-main 指定路径而言。

比如 require 函数中的 'app/sub'。表示的是 js/app/sub.js.

用于模块名的path不应含有.js后缀,因为一个path有可能映射到一个目录。路径解析机制会自动在映射模块名到path时添加上.js后缀。

框架比较:http://www.zhihu.com/question/21170137

学习资料:

http://www.3lian.com/edu/2014/02-10/128044.html
http://www.tuicool.com/articles/J3INv2Z

http://www.tiecou.com/2165.html

http://www.cnblogs.com/xing901022/category/658522.html;

http://www.runoob.com/w3cnote/requirejs-tutorial-1.html;

http://www.runoob.com/w3cnote/requirejs-tutorial-2.html

http://requirejs.org/docs/optimization.html;

http://www.ruanyifeng.com/blog/2012/11/require_js.html;

http://www.cnblogs.com/snandy/archive/2012/05/22/2513652.html;

http://www.tuicool.com/articles/jam2Anv;

requirejs——基础的更多相关文章

  1. RequireJS基础(三)

    这篇来写一个具有依赖的事件模块event. event提供三个方法bind.unbind.trigger来管理DOM元素事件. event依赖于cache模块,cache模块类似于jQuery的$.d ...

  2. RequireJS基础(二)

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...

  3. JavaScript模块化编程之AMD - requireJS基础使用

    JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...

  4. requirejs基础教程

    一.初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用. ...

  5. RequireJS 基础(一)

    RequireJS由James Burke创建,他也是AMD规范的创始人. RequireJS会让你以不同于往常的方式去写JavaScript,你将不再使用script标签在HTML中引入JS文件,以 ...

  6. RequireJS基础知识

    RequireJS解决代码依赖问题,异步加载js,避免页面失去相应 RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代 ...

  7. requireJS基础使用

    index.html <body class="requireBODY" id="body"><div id="vuebox&quo ...

  8. 前端JS框架系列之requireJS基础学习

    1 背景 伴随着项目功能的不断扩充,客户体验的不断完善,实现交互逻辑的JS代码变得越来越多.起初,为了管理JS代码,我们把JS从页面中解放出来独立成文件,接着又把相似的交互代码提取到公共的JS页面中. ...

  9. requireJS入门基础

    参考  require.js详解 1.引用requireJS的html文件 <!DOCTYPE html> <head> <title>requireJS</ ...

随机推荐

  1. Activity传递参数——传递简单数据

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.修改MainActivity.java中的onCreate函数 protected voi ...

  2. 导出/打印项目数据报表需要设置IE浏览器

    导出/打印项目数据报表需要设置IE浏览器如下: 1.将本地服务器站点设置为可信站点, 2.通过点击网页上的工具→Internet选项→安全→自定义级别→把关于activeX控件和插件的选项都设置成启用 ...

  3. [置顶] Android玩转百度地图Sha1获取正确姿势?

    场景一 由于最近项目钟要用到定位功能因此肯定需要用到地图以及地位功能,相信大家也知道目前国内比较出名的地图像百度.高德.腾讯等这些还是用到比较多的,于是思考了一下决定还是用百度,相信老司机们都知道的哈 ...

  4. Build ios app with Delphi Xe4. Lazy Social Talker ready for sale.

    Yes, it is build with Delphi XE4. try it. now. What is  Lazy Social  Talker? Lazy Social Talker is a ...

  5. 使用sqlmap执行SQL注入攻击

    sqlmap是开源的SQL注入自动攻击工具,它可以自动的探测SQL注入点并且进一步控制网站的数据库. Kali Linux默认安装了这个工具. 找到潜在的攻击目标 第一步是找到有SQL注入漏洞的网站. ...

  6. linux 下看所有用户 及所有组

    俺的centos vps上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表,google了一下,找到方便的放:一般情况下是 cat /etc/passwd 可以查看所有用 ...

  7. MySql必知必会实战练习(一)表创建和数据添加

    1.实战环境 windows 10 64位 mysql-8.0.13 mysql编辑和查看工具:NaviCat for MySql 表脚本文件: ########################### ...

  8. 通信对象System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

    问题描述:在客户端站点访问WCF服务后,在页面停留时间过长,客户端站点将会报错.报错内容如下: 通信对象System.ServiceModel.Channels.ServiceChannel 无法用于 ...

  9. [Luogu4169][Violet]天使玩偶/SJY摆棋子

    luogu 题意 一个平面上有\(n\)个点,\(m\)次操作,每次新增一个点,或者是询问离某个点最近的点的距离.这里的距离是曼哈顿距离. \(n,m\le3*10^5\) sol 写一发\(CDQ\ ...

  10. return super(ParamValueInline,self).formfield_for_foreignkey(db_field,request,**kwargs)自己返回自己的父类

    作者:刘强胜链接:https://www.zhihu.com/question/30361435/answer/83940591来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...