1、简介

官方对requirejs的描述:
RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.
即在浏览器中,require.js可以作为文件的模块加载器,可以用在Node和Rhino环境中。
工作方式为:requireJS使用head.appendChild()将每一个依赖加载为一个script标签。然后等待所有的依赖加载完毕,计算出模块定义函数正确调用顺序,再依次调用它们。

2、优点

(1)防止js加载阻塞页面渲染
(2)管理模块之间的依赖,便于管理和维护

3、使用介绍

(1)引入:

  • 方式一:使用data-main
<script data-main="js/main" src="js/require.js"></script>

加载requirejs脚本的script标签加入了data-main属性,这个属性指定的js将在加载完reuqire.js后处理。把require.config的配置加入到data-main后,就可以使每一个页面都使用这个配置,然后页面中就可以直接使用require来加载所有的短模块名。
data-main还有一个重要的功能,当script标签指定data-main属性时,require会默认的将data-main指定的js为根路径

  • 方式二:直接script嵌入
<script src="js/require.js"></script><script src="js/app.js"></script>

(2)require.config配置

在main.js中进行require.config的配置。如如下主要的配置参数:

  • baseUrl: 设置根目录
  • paths:配置模块的加载位置。可以给模块定义一个更好记的名字。还可以配置多个路径,如果远程CDN没有加载成功,则加载本地的文件。
require.config({paths : {"jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "js/jquery"],"user" : "js/user"   }
})
  • shim: 通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim。
require.config({shim: {"underscore" : {exports : "_";},"jquery.form" : {deps : ["jquery"]}}
})

除了可以在require.js加载完毕后,通过require.config进行配置之外,在require.js加载之前,定义一个全局的对象变量 require 来事先定义配置参数。然后在require.js被浏览器加载完毕后,便会自动继承之前配置的参数。

<script>var require = {baseUrl: 'js/',paths: {'jquery': 'http://xxx.xxxx.com/js/jquery.min','index': 'index'},deps:[index]};</script><script src="js/require.js"></script>

除了上面3个常用的配置项,还有其他的:
urlArgs:解决版本控制问题。urlArgs: 'ver=0.1.2'。还可以用来实现在文件后增加随机数的方式,忽略浏览器缓存。urlArgs: new Date().getTime(),
waitSeconds: 设置加载脚本的超时时间
deps: 声明require.js加载完成后便会自动加载的模块
callback: 当deps中自动加载模块加载完成时,处罚的回调
map: map告诉RequireJS在任何模块之前,都先载入这个模块,这样别的模块依赖于css!../style/1.css这样的模块都知道怎么处理了

(3)require和define

这两个是最常用的命名。define用于定义模块。require用于加载模块及配置文件。在requirejs中一个文件就是一个模块,文件名就是该模块的ID。

  • define:可以单独定义键值队数据,作为配置文件来使用;
define({'name':'zhangsan','age':'20'});

还可以定义依赖的关系:

4、压缩

(1) r.js

使用r.js来进行压缩时,需要指定build.js文件。build.js主要配置如下:

  ({baseUrl: './js/pages',    //相对于appDir,代表要查找js文件的起始文件夹,下文所有文件路径的定义都是基于这个baseUrl的appDir: './',    //项目根目录dir: './outdir',   //输出目录,全部文件打包后要放入的文件夹(如果没有会自动新建的)/* 有了dir,就不能使用out配置项了,你在编译时它有非常明确的提示 *//*"appDir" is not compatible with "out". Use "dir" instead. appDir is used to copy whole projects, where "out" with "baseUrl" is used to just optimize to one file.*//*"appDir" 和 "out"是不兼容的,需要用"dir"代替, "appDir"是用来拷贝整个项目的,"out"和"baseUrl"仅是用来优化一个文件的*/modules: [//要优化的模块 —— 里面的配置项即各页面的 相对baseUrl路径的 省略后缀“.js”的 入口文件(入口文件 ---- 即加载页面时引入require.js的script标签上data-main属性所指定的文件)//该属性必不可少,因为一个程序至少需要有一个入口{ name:'main'},{ name:'index'} ],out: 'index-build.js',  //输出文件名name:'main',fileExclusionRegExp: /^(r|build)\.js|.*\.scss$/,   //正则匹配过滤文件,匹配到的文件将不会被输出到输出目录去,这里过滤掉的是 r.js、build.js、*.scss三类文件optimizeCss: 'standard',removeCombined: true, //如果为true,优化器将从输出目录中删除已合并的文件paths: { //各模块相对baseUrl的路径,直接从require.config的path配置中烤取即可"underscore": "../libs/underscore/underscore-min","backbone": "../libs/backbone/backbone-min",},shim:{// 配置不符合AMD规范的模块,直接从require.config的shim配置中烤取即可"underscore": {exports: "_"},"backbone": {deps: ["underscore", "jquery"],exports: "Backbone"},} })

执行r.js -o build.js 即可实现压缩。
在链接https://www.cnblogs.com/rubyl... 中有很好的示例,可以参看学习。

(2) 使用gulp

安装好gulp和gulp-requirejs-optimize
gulpfile的配置如下:

var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('rjs', function(){return gulp.src('src/js/*.js').pipe(requirejsOptimize({optimize: 'none',mainConfigFile: 'src/config.js'})).pipe(gulp.dest('dist/js/'));
});

5、加载其他的文件

(1) 加载css
加载css需要使用require-css插件(https://github.com/guybedford...
首先需要设置

map: {'*': {'css': 'require-css/css' // or whatever the path to require-css is}
}

在define中使用就可以了

define(['css!styles/main'], function() {//code that requires the stylesheet: styles/main.css
});

(2) 加载其他

define(['text!review.txt','image!cat.jpg'],function(review,cat){console.log(review);document.body.appendChild(cat);});

使用text和image插件,则是允许require.js加载文本和图片文件。类似的插件还有json和mdown,用于加载json文件和markdown文件。

require.js学习记录相关推荐

  1. Cytoscape.js学习记录

    记录学习Cytoscape.js的过程 官方教程 https://js.cytoscape.org/ 另有一篇别人的博文分享:cytoscape.js基础篇https://blog.csdn.net/ ...

  2. 我的three.js学习记录(一)

    在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL.然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间. 过了这个项目之后,就再也 ...

  3. Node.JS 学习记录(02)

    Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在 ...

  4. Auto.js学习记录

    软件选择:通过在CSDN的查找发现了几款手机自动化脚本软件,例如:按键精灵.Auto.js等等.最后我选择了Auto.js .Auto.js共有三个版本:4.1.1版本.7.0.0版本和8.0.0版本 ...

  5. mock.js学习记录

    mock介绍 为什么要使用mock.js呢?在系统的开发中,做前端的同学经在工作中常常面临一个问题:因为后端的接口迟迟不能做好而无法进行页面的调试,尤其在根据后端的数据做数据的动态展示的时候,这种情况 ...

  6. JS学习记录(BOM部分)

    BOOM部分 Screen <html lang="en"> <head><meta charset="UTF-8">< ...

  7. 5月学习总结(Ant-Design,mustache,require.js,grunt)

    一.Ant-Design学习 因为Ant-Design是基于React实现的,之前自己也学过一段时间的React,对React还是相对比较熟悉的,在学习Ant-Design也还不算吃力. 最开始是从源 ...

  8. 【学习记录2】数组里的字符串转换成数字或者把数字转换成字符串

    js学习记录之数组里纯数字和纯字符串之间的转换 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String); //结果: ['1', '2', '3' ...

  9. 小程序js+django+服务器后台搭建流程总结(第五周学习记录)

    学习记录 这周的工作依然是做一些服务器的调试工作,但是为了方便这周末的展示,我打算把这段时间的所有后台搭建工作和对所有服务器的操作流程做一个系统的总结和归纳,方便学习记录与交流 一.微信小程序js部分 ...

最新文章

  1. Redis 性能问题分析(好文推荐)
  2. redis持久化 mysql_Redis 如何保持和MySQL数据一致
  3. c语言编的游戏怎么在安卓平台使用,谁知道怎么把c语言写的游戏安装到安卓手机上面玩??...
  4. 自备干货!如何有效的做竞品迭代分析
  5. C 语言链表其他实现
  6. nginx A/B 灰色发布
  7. HDU - 5451 Best Solver(循环群+矩阵快速幂)
  8. Python基础知识之二
  9. 暑假闲着没事第一弹:基于Django的长江大学教务处成绩查询系统
  10. DeepFool对抗算法_学习笔记
  11. 【NOIP2015】推销员
  12. 独立站选杂货爆品站还是精耕垂直站?
  13. 中年刘强东背后,是已婚男性的集体挣扎
  14. spring常见漏洞总结
  15. Sparql查询RDF
  16. 如何戒掉手机去认真学习?
  17. Mysql基础(入门)
  18. 一元流量参数为null_汉中市政排污水流量计欢迎选购
  19. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题(10.14)
  20. ak和sk怎么认证 海康威视_aksk鉴权

热门文章

  1. 武汉计算机985211大学有哪些,武汉985211大学有哪些 武汉985211大学有什么
  2. python函数的作用域_python函数的作用域和引用范围
  3. php斯芬克斯,斯芬克斯之迷——ie私有属性haslayout的困扰
  4. PCA、SVD、ZCA白化理论与实现
  5. 五种方法提高你的智力
  6. 随便贴两个漏洞,如 Apache JServ协议服务
  7. [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
  8. mysql盲注学习-1
  9. LVS--NAT模型配置
  10. Fiddler 域名过滤