require.js学习记录

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文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS-AFNetworking参数和多文件同时上传【多文件上传】

1. 前言 在项目开发中&#xff0c;我们经常需要上传文件&#xff0c;例如&#xff1a;上传图片&#xff0c;上传各种文件&#xff0c;而有时也需要将参数和多个文件一起上传&#xff0c;不知道大家的项目中遇到了没有&#xff0c;我在最近的项目中&#xff0c;就需要这样的一个…

智能音箱 之 平台方案简介

智能音箱&#xff0c;被认为是物联网时代的入口&#xff0c;在去年成为了各大厂商争相投入的风口。在当今互联网时代&#xff0c;它不仅仅是一台单纯的音乐播放器&#xff0c;在其背后支撑的 AI 技术才是整个产品的核心&#xff0c;也是各大公司觊觎物联网入口的最根本原因。经…

Linux Kconfig及Makefile学习

内核源码树的目录下都有两个文档 Kconfig &#xff08;2.4版本是Config.in&#xff09;和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库&#xff0c;每个Kconfig分别描述了 所属目录源文档相关的内核配置菜单。在内核配置make menuconfig时&#xff0c;从K…

Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)...

一.概述 在上一篇里讲到了shell脚本&#xff0c;shell按照命令在脚本中出现的顺序依次进行处理&#xff0c;对于顺序操作已经足够了&#xff0c;但许多程序要求对shell脚本中的命令加入一些逻辑流程控制&#xff0c;这样的命令通常叫做 结构化命令。 1.1 使用if - then语句 --最…

Scala-Spark digamma stackoverflow问题

这两天在用spark做点击率的贝叶斯平滑&#xff0c;参考雅虎的论文进行了一番尝试。 先上代码&#xff1a; 1 # click_count, show_count # this method takes time2 def do_smooth(data_list):3 import scipy.special as sp4 a, b, i 1.0, 1.0, 05 da, db a, b6 …

IIS接口详细介绍

1. 概述 I2S Inter-IC Sound Integrated Interchip Sound IIS&#xff0c;是飞利浦在1986年定义&#xff08;1996年修订&#xff09;的数字音频传输标准&#xff0c;用于数字音频数据在系统内器件之间传输&#xff0c;例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC…

UVA - 10934 Dropping water balloons(装满水的气球)(dp)

题意&#xff1a;有k个气球&#xff0c;n层楼&#xff0c;求出至少需要多少次实验能确定气球的硬度。气球不会被实验所“磨损”。 分析&#xff1a; 1、dp[i][j]表示第i个气球&#xff0c;测试j次所能确定的最高楼层。 2、假设第i-1个气球测试j-1次所确定的最高楼层是a, 若第i个…

继承进阶

先讲一个例子&#xff1a; #老师有生日&#xff0c;怎么组合哪&#xff1f; class Birthday: # 生日def __init__(self,year,month,day):self.year yearself.month monthself.day dayclass Teacher: # 老师<br>def __init__(self,name,birth):self.name nameself.b…

PCM接口详细介绍--TDM方式

1. 概述 PCM = Pulse Code Modulation 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。图为4 bit 采样深度的PCM数据量化示意图: PCM数字音频接口,说明接口传输的音频数据是通过PCM方式采样得到的,区别于PDM形式;IIS传输的也是PCM类型数据,属于其一个特…

网站同源策略

所谓"同源"指的是"三个相同"&#xff1a;协议&#xff0c;域名&#xff0c;端口。 举例来说&#xff0c;http://www.example.com/dir/page.html这个网址&#xff0c;协议是http://&#xff0c;域名是www.example.com&#xff0c;端口是80&#xff08;默认端…

Kconfig文件结构(图文)简介

1 Kconfig和Makefile 毫不夸张地说&#xff0c;Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上&#xff0c;Linux 内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。Kconfig和Makefile就好似一个城市的地图&#xff0c;地图引导我们去 认识一…

PDM接口介绍

1. 概述 PDM Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法。 PDM则使用远高于PCM采样率的时钟采样调制模拟分量&#xff0c;只有1位输出&#xff0c;要么为0&#xff0c;要么为1。因此通过PDM方式表示的数字音频也被称为Oversampled 1-bit Audio。相比P…

js正则学习分享

http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.htmlhttp://www.cnblogs.com/tylerdonet/p/4262251.html //正整数 /^[0-9]*[1-9][0-9]*$/; //负整数 /^-[0-9]*[1-9][0-9]*$/; //正浮点数 /^(([0-9]\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9])|([0-9]*[1…

Linux系统下UDP发送和接收广播消息小例子

分类&#xff1a; 网络通信 2013-01-07 10:54 1336人阅读 评论(6) 收藏 举报 [cpp] view plaincopyprint?// 发送端 #include <iostream> #include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h>…

Kaggle 泰坦尼克

入门kaggle&#xff0c;开始机器学习应用之旅。 参看一些入门的博客&#xff0c;感觉pandas&#xff0c;sklearn需要熟练掌握&#xff0c;同时也学到了一些很有用的tricks&#xff0c;包括数据分析和机器学习的知识点。下面记录一些有趣的数据分析方法和一个自己撸的小程序。 1…

语音交互设备 前端信号处理技术和语音交互过程介绍

一、前端信号处理 1. 语音检测&#xff08;VAD&#xff09; 语音检测&#xff08;英文一般称为 Voice Activity Detection&#xff0c;VAD&#xff09;的目标是&#xff0c;准确的检测出音频信号的语音段起始位置&#xff0c;从而分离出语音段和非语音段&#xff08;静音或噪…

css中伪类与伪元素的区别

一&#xff1a;伪类&#xff1a;1:定义&#xff1a;css伪类用于向某些选择器添加特殊效果。 伪类其实与普通的css类相类似&#xff0c;可以为已有的元素添加样式&#xff0c;但是他只有处于dom无法描述的状态下才能为文档树中的元素添加样式&#xff0c;所以将其称为伪类。 2:伪…

【BZOJ1500】[NOI2005]维修数列 Splay

【BZOJ1500】[NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000)&#xff0c;N 表示初始时数列中数的个数&#xff0c;M表示要进行的操作数目。第2行包含N个数字&#xff0c;描述初始时的数列。以下M行&#xff0c;每行一条命令&#xff0c;格式参见…

bzoj2588: Spoj 10628. Count on a tree(树上第k大)(主席树)

每个节点继承父节点的树&#xff0c;则答案为query(root[x]root[y]-root[lca(x,y)]-root[fa[lca(x,y)]]) #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int maxn1…

图文详解YUV420数据格式

YUV格式有两大类&#xff1a;planar和packed。 对于planar的YUV格式&#xff0c;先连续存储所有像素点的Y&#xff0c;紧接着存储所有像素点的U&#xff0c;随后是所有像素点的V。 对于packed的YUV格式&#xff0c;每个像素点的Y,U,V是连续交*存储的。 YUV&#xff0c;分为三个…