RequireJS 是一个遵循 AMD 规范的模块化加载框架

与上文seajs一样,这里简单介绍其相关用法

同样的,首先是下载好 require.js --> http://requirejs.org/docs/download.html#requirejs

AMD规范是预加载,也就是说会马上将所有模块全加载。

写法跟seajs也类似,只不过 当需要包含模块时,一般会将模块名置入第一个参数。而不是直接require  详见

(新版本的也有CMD版require包含依赖的方式,但本质还是一样,下面会提到)

还是举个例子:

目录结构同级

index.html:

注意到这里script标签多了一个data-main属性(加不加后缀js都可以),它标识了引用主模块入口 main.js

(也可以不使用这种引用入口方式,下边会介绍另一种方式,注意啦~)

<!DOCTYPE html>
<html>
<head>
<title>require</title>
<style type="text/css">
</style>
</head>
<body> <script type="text/javascript" data-main='main' src="./require.js"></script> </script>
</body>
</html>

main.js:

将两个模块置入参数1,并以回调的方式传入使用

define(['main1','main2'],function(main1,main2){
console.log('module of main:');
main1.say();
main2.say(); });

main1.js:

define(function(require,exports,module){
console.log('module of main1:'); module.exports = {
say: function(){
console.log('main1--hello');
}
};
});

main2.js:

define(function(require,exports,module){
console.log('module of main2:'); return {
say: function(){
console.log('main2--hello');
}
};
});

浏览器打开index.html 可以发现结果:

顺序乱了是不是

其实这就是因为AMD规范预先加载的规则,预先把所有依赖都执行了(虽然我们还没用到)

而且这加载是并行的,(默认情况下)main1和main2不分先后。

假设 main.js文件因网络问题加载延迟后,就有可能出现以下结果

module of main2:

module of main1:

module of main:

...

不过,我们也可以为其什么依赖关系,比如main1依赖main2,则就能保证“所谓的顺序”-- 先有main2才有main1

比如将index.html修改成

<!DOCTYPE html>
<html>
<head>
<title>require</title>
<style type="text/css">
</style>
</head>
<body> <script type="text/javascript" src="./require.js"></script>
<script type="text/javascript">
require.config({
shim:{
'main1':{
deps: ['main2']
}
}
});
require(['main'],function(main){
console.log(main.num);
});
</script>
</script>
</body>
</html>

main.js:

define(['main1','main2'],function(main1,main2){
console.log('module of main:');
main1.say();
main2.say();
return {num:10};
});

这时的结果:

上面提到了requirejs也更新了遵循CMD规范的策略,但表面上遵循了,本质上还是AMD的

为什么这么说呢? 引自:

所以要用requirejs就老老实实使用AMD的,如果想使用CMD的方式,就用seajs吧

RequireJS 模块化加载框架使用的更多相关文章

  1. SeaJS 模块化加载框架使用

    SeaJS 是一个遵循 CMD 规范的模块化加载框架 CommonJS,CMD,AMD等规范后文会提到,这里主要先了解如何在代码中使用. 如果你有使用过nodejs ,那么理解起来就容易多了. 我们通 ...

  2. seajs模块化加载框架使用

    seajs是模块化加载框架.seajs.org已经打不开了,seajs的github.seajs速查文档 <!--如果完成下面4步,则seajs掌握了80%js模块化1.引入seajs的库 :& ...

  3. RequireJS与SeaJS模块化加载示例

    web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...

  4. js模块化加载器实现

    背景 自es6以前,JavaScript是天生模块化缺失的,即缺少类似后端语言的class, 作用域也只以函数作为区分.这与早期js的语言定位有关, 作为一个只需要在网页中嵌入几十上百行代码来实现一些 ...

  5. 一起写一个Android图片加载框架

    本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...

  6. 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结

    是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...

  7. 转: javascript模块加载框架seajs详解

    javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...

  8. javascript模块加载框架seajs详解

    SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加载).SeaJS可以和jQuery完美集成,使用 ...

  9. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

随机推荐

  1. spring和ehcache整合,实现基于注解的缓存实现

    要实现基于注解的缓存实现,要求Spring的版本在3.1或以上版本. 首先需要在spring的配置文件中添加对缓存注解的实现: <?xml version="1.0" enc ...

  2. ajax 异步请求webservice(XML格式)

    function callAjaxWebservice(){ alert("call ajax"); try { $.ajax({ type: "POST", ...

  3. Android Studio 经常使用功能介绍

    为了简化 Android 的开发力度,Google 决定将重点建设 Android Studio 工具.Google 会在今年年底停止支持其它集成开发环境.比方 Eclipse. Android St ...

  4. 【原】 COCOS2D—LUA 获取剪贴板内容

    android下: local luaj = require ("framework.luaj")   local ok,ret  = luaj.callStaticMethod( ...

  5. 像table一样布局div

    原文:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/ 下面是我翻译的内容,是根据我对文章的理解意译的 ...

  6. Spring进阶教程之在ApplicationContext初始化完成后重定义Bean

    前言 很久没有写博客了,也是两个原因:一是自己觉得一直在班门弄斧,其实自己没什么技术可言:二是很多朋友的问题实际上可以自行解决,我经常觉得不该我来过问,或者是有时候我认为技术还得靠自己钻研,我一两句话 ...

  7. Java与邮件系统交互之使用Socket验证邮箱是否存在

    最近遇到一个需求:需要验证用户填写的邮箱地址是否真实存在,是否可达.和普通的正则表达式不同,他要求尝试链接目标邮箱服务器并请求校验目标邮箱是否存在. 先来了解 DNS之MX记录 对于DNS不了解的,请 ...

  8. HTML5新特性之WebSocket

    1.概述 HTTP协议是一种无状态协议,服务端本身不具有识别客户端的能力,必须借助外部机制,比如session和cookie,才能与特定客户端保持对话.这多多少少带来一些不便,尤其在服务器端与客户端需 ...

  9. C primer plus 练习题 第五章

    1. #include <stdio.h> #define MINU 60 int main() { int minute, hour, m; printf("请输入分钟:&qu ...

  10. VS2010 发布web项目 问题

    载:http://www.cnblogs.com/shaocm/archive/2012/08/10/2632116.html