RequireJs使用快速入门
前言:Requirejs作为一个ES5环境流行的模块加载器,在很多项目中使用它。而且这个开源库任然在更新,同类产品seajs已经不更新了。
ES6之后引入import 或者使用Commonjs的方式引入模块,在未来方向上将替换Requirejs是必然的。
一个产品是否选用ES6来开发仍然需要面临很多问题。
<1>.ES6还不能为浏览器全部识别,发布之前要编译,调试起来比浏览器上提示复杂得多。
<2>.应用ES6 必然要一定的高水平的开发资源,ES6 ,webpack等构建工具都需要一定的学习曲线。
<3>.老项目基本上很难迁移,那意味着很多组件很可能要重新书写。
所以requirejs任然是开源模块加载器首选。
一.Requirejs帮我们实现那些功能。
1.声明不同js文件之间的依赖
2.可以按需、并行、延时载入js库
3.可以让我们的代码以模块化的方式组织
二.一个简单的Requirejs的产品如何搭建
1.在html中引入Requirejs ,<script data-main="js/app.js" src="js/require.js"></script>
其中data-main中对应的路径是Requirejs配置的主入口, data-main和 src中路径都是相对html的路劲,或者是绝对路径
2.data-main文件内容,比如本例中的js/app.js文件
requirejs.config({
baseUrl:'js/lib',
paths :{
app:'../app'
} }); require(["app/start"], function(app) {
app.hello();
});
2.1 baseUrl为模块(module)的根目录,如果require(依赖) 的模块直接是用文件名作为id的会直接在这个目录寻找同名文件资源
2.2 paths 中的属性可以给不同的路径或者文件别名,如果require(依赖) 的模块使用路径作为id的时候可以 通过别名匹配path中路径,
3.定义模块(module)
requirejs提供了多种定义模块的方式,可以使用/不使用依赖,返回变量,返回对象,函数,可使用CommonJs的方法在export,module中返结果
本例中是定义了一个无依赖的模块
define([], function() {
return {
hello: function() {
alert("hello, world");
}
}
});
还有一种定义了模块id 的定义方式,如:jquery源代码中的,申明过id的不能直接使用path定义其他别名访问
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
} );
}
4.shim配置: 将某个依赖中的某个全局变量暴露给requirejs,当作这个模块本身的引用
如官网中例子 ,把backbone.js引入抛出Backbone作为模块名引入,dept中申明它需要的依赖,backbone依赖underscore 和jquery
requirejs.config({
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'underscore': {
exports: '_'
}
}
});
对于不依赖于requirejs的库, 除了把js改为require.js的amd方式书写,还能使用shim来抛出全局对象。
/* util.js */
function util(){
alert("i am util");
}
/** app.js **/
requirejs.config({
baseUrl:'js/lib',
paths :{
app:'../app',
util:'../util'
},
shim:{
util: { exports: 'util' }
}
}); require(["util"], function(util) {
util();
});
暴露多个全局函数
/* util.js */
function util() {
alert("hello, util~");
}
function util2() {
alert("hello, util2~");
}
/** app.js **/
requirejs.config({
baseUrl:'js/lib',
paths :{
app:'../app',
util:'../util'
},
shim:{
util: {
init: function() {
return {
util: util,
util2: util2
}
}
}
}
});
require(["util"], function(util) {
util.util();
util.util2();
});
5.关于打包压缩,requirejs官方提供了一套打包工具r.js 只要配置对应的build.js可以帮助我们自动化构建
具体例子 https://github.com/volojs/create-template
build.js如何配置可以参考 Richard Chen的翻译 http://www.chenliqiang.cn/node/22
官网配置说明http://requirejs.org/docs/optimization.html
5.1 构建js
{
"appDir": "../www", //打包前目录
"mainConfigFile": "../www/app.js", //打包入口文件
"dir": "../www-built", //打包后生成文件
"modules": [ //注意如果要分包,把依赖和主文件分开,需参考modules 第⑶种配置
{
"name": "app" //指定生产文件的文件名
}
]
} 运行命令
node tools/r.js -o tools/build.js
5.2构建css文件
需要一个css文件使用@import 包含所有依赖的css文件,
@import "bootstrap.min.css";
@import "font-awesome.min.css";
@import "main.css"; node build/r.js -o cssIn=../www/css/styles.css out=../www-built/css/all.css optimizeCss=standard
如果构建多页面,以及构建多页面使用shim的,请参考官网例子
https://github.com/requirejs/example-multipage
https://github.com/requirejs/example-multipage-shim
主要是配置modules来处理模块加载,分包,给页面和资源文件重命名。
6.关于插件(Plugins) ,Requirejs官方提供了5个插件 domReady il8n text step order
其中 step order在新版本中已经不支持了,il8n做国际化的,domReady 勇于引入其他amd加载器。
text.js 可以配置依赖css ,htm等模版文件,支持html或者模版ajax加载,我和我工作过的一家公司用过这个插件,多模块化十分好用,后台系统可以经常让用户清空缓存的可以用
但是用r.js来构建的时候会悲剧,最主要的是css合并的问题,使用这种方式加载css合并后十分不友好的,毕竟css都是颗粒加载经来的,发布新版本css资源文件为了防止缓存经常会使用路径加版本号,或者文件md5改名,
https://github.com/requirejs/requirejs/wiki/Plugins
RequireJs使用快速入门的更多相关文章
- RequireJS 快速入门
说明:本文只提供快速入门内容,方便快速进入实战状态.更高级的配置,请参考官网文档. 当初之所以使用 RequireJS 等工具,是因为想提高js的加载速度,避免不必要的堵塞.但通过一段时间的使用, ...
- angularAMD快速入门
ngularAMD是作者 marcoslin 使用 RequireJS + AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web App.他特别适合快速开发SPA应用,适当的和 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
随机推荐
- Python 串口通信 GUI 开发
在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...
- GRPC .netcore
GRPC是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRPC ...
- JMeter—断言
断言用来对服务器的响应数据做验证,常用的断言是响应断言,支持正则表达式. 一.BeanShell Assertion 用来访问JMeter的属性: log对象,可以利用此对象写日志 SampleRes ...
- 初学C#,用vs去开始hello world!
小弟初学c#,刚刚学会用vs来编写经典的hello,world程序,记录,并且分享给大家. 1. 用vs新建一个c#控制台程序: a. 首先打开vs,如下图所示,点击[新建项目]
- 2019年华南理工大学程序设计竞赛(春季赛) B 修仙时在做什么?有没有空?可以来炼丹吗?(思维建图搜索)
https://ac.nowcoder.com/acm/contest/625/B 分析: 全部的状态只有1<<18 个 , 所以我们可以预处理 f[u][j] , 然后建立出全部的u可以 ...
- [八分之三的男人] POJ - 1741 点分治 && 点分治笔记
题意:给出一棵带边权树,询问有多少点对的距离小于等于\(k\) 本题解参考lyd的算法竞赛进阶指南,讲解的十分清晰,比网上那些讲的乱七八糟的好多了 不过写起来还是困难重重(史诗巨作 打完多校更详细做法 ...
- kamctl start
尽管没有吃饭,胃酸,九点半,,,还是挺高兴的.只截图不说话. 这个问题弄得我好烦啊.几个小时...网罗了国外几个论坛都没有解.我还没有想到这就不是问题,,,多试多试 再看看moni 也没什么意思,就是 ...
- annotation-config和component-scan
以前学到<context:annotation-config></context:annotation-config>和<context:component-scan b ...
- FlutterToast 使用
参看 FlutterToast 开源库 https://github.com/PonnamKarthik/FlutterToast
- jquery加载单文件vue组件
/**注册组件 */ function registerComponent(name){ dm[name] = {}; Vue.component(name + '-component', funct ...