【笔记】关于require.js 的用法
最近忙于学校的一个新网站建设,对于以前的前端程序编写方式的不正规特意上网学习了require.js 的用法,使此次的工程更加有条理同时符合当前前端的开发模式——前端模块化。
网上有不少很好的学习文章这里推荐阮一峰老师的:http://www.ruanyifeng.com/blog/2012/11/require_js.html
下面是本人归纳的一些要点:
1、使用require.js 必须从官网下载 require.js 文件 http://www.requirejs.cn/ 打开官网便可以下载,下载完之后就好像导入jquery 文件一样用script 标签导入
<script type="text/javascript" src="js/require.js" defer async="true" data-main="js/loginMain"></script>
这里的script 标签不再像以前导入js 文件那样简单,这里有几个重要属性:
①:defer 和 async="true":这两个属性是规定浏览器异步加载requier.js 这个文件的,防止在网络环境较差的时候 网页处于假死状态
②:data-main: 这个属性是指定此页面js 脚本的main 文件,就像java 以及 c 语言中的main 函数一样,所有通过require.js 整理的模块都将在这个文件里面执行
而src 自然就是导入我们的 require.js 文件了
2、main 函数的实现:
导入完 require.js 文件,指定好了页面的main 文件了我们就要编写我们的main 文件了
require(["jquery.min","math"],function($,math){
var body = $("body");
console.log(body);
var result = math.add(1,2);
console.log(result);
})
main 文件里面的不是main 函数而是由 require.js 提供的require 函数,这个函数接收两个参数:
第一个参数:数组,保存着需要加载的模块文件名字,例如jquery.min.js 这个模块文件它的名字当然就是 “jquery.min” 啦,而那个math 就是我自己定义的js 文件 math.js
第二个参数:回调函数。这个函数同样接收参数,第一个参数保存着多少个模块的名字,这个函数可写的参数就有多少个,而函数的参数只是这一个模块的一个代名词,主要使用参数的名字去调用模块的某一个方法或值,例如,jquery的参数可以写成这样:
require(["jquery.min","math"],function(q,math){
var body = q("body");
console.log(body);
var result = math.add(1,2);
console.log(result);
})
那么,调用jquery 模块的的方法时就只能通过 “q” 这个参数名去引用了
*注意每一个模块都必须有一个出口(返回值)
在回调函数之内我们就可以使用加载了的模块中的方法了!
3、require.js 接受模块的形式是 AMD 形式
当我们使用 require.js 加载我们的模块时我们不可以用以前编写javascript 的方式写了 必须按照AMD 规范,即像如下这样写:
define(function(){
function add(num1,num2){
return num1 + num2;
}
return {
add: add
};
})
如果某一模块需要依赖其他一些模块,则define 方法中的第一个参数可以传进一个数组,数组里面保存的是要调用的模块名字,函数的参数依然是调用前面依赖模块的代名词而已
例:
define(["M1"],function(m1){
function add(num1,num2){
return num1 + num2;
}
return {
add: add
m1.foo();
};
})
所有模块的代码都要写在 define 这个方法的回调函数中
但是这种形式在我们编写自己的模块的时候显然是没什么大问题的,反正都是要自己写。但是在导入一些流行的前端库例如:jquery这些的时候就有问题了,jquery的某些旧版本(这里我没有详细研究反正我用的 1.9.1 版本是不符合 AMD 规范的)就不符合AMD 规范了
那怎么办?没关系 require.js 又提供了一些方法可以兼容这些不符合 AMD形式的模块
只要我们在页面的main 文件中 require方法的前面加上这个方法就好:
require.config({
shim:{
'jquery.min':{
exports: '$'
}
}
})
这个方法是require.config 方法,它接收一个对象作为参数,对象的内部有一个 shim属性,用来规定加载文件的依赖性以及输出的对象
上面的例子我将jquery 自定义规范,语法是首先在 shim属性里面 定义一个不符合AMD 规范模块的属性名(这里就是jquery啦),然后这个属性的值是一个对象,对象里面又有两个属性:
第一个是:exports 属性:值为此模块的输出值 也就是return的值,jquery的主函数就是 “$” 所以这里填 $
第二个是:deps 属性:值为此模块依赖的其他模块名字以数组的形式保存,例如:
require.config({
shim:{
'math':{
deps: ['m1','m2'],
exports: 'math'
}
}
})
这里的 math 模块依赖 m1,m2 模块,输出为 math这个对象
本篇文章纯是个人觉得的要点归纳,不足的地方敬请原谅
【笔记】关于require.js 的用法的更多相关文章
- Javascript模块化编程(三):require.js的用法
Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...
- Javascript模块化编程require.js的用法
JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...
- (转)Javascript模块化编程(三):Require.js的用法
转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...
- javascript模块化编程库require.js的用法
随着javascript的兴起,越来越多的公司开始将JS模块化,以增加开发的效率和减少重复编写代码的.更是为了能更加容易的维护日后的代码,因为现在的随着人们对交互效果的越来越强烈的需求,我们的JS代码 ...
- Javascript模块化编程(三):require.js的用法(转)
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...
- Javascript模块化编程(三):require.js的用法 作者: 阮一峰
声明:转载自阮一峰的网络日志 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用 ...
- Javascript模块化编程(三):require.js的用法【转】
作者: 阮一峰 日期: 2012年11月 7日 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js ...
- require.js的用法
我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文 ...
- Javascript模块化编程(三):require.js的用法 (转)
转自:http://my.oschina.net/u/1390066/blog/213769 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载 ...
随机推荐
- WordPress匿名投稿插件:DX-Contribute(WP我要投稿,我要爆料)
倡萌在<WordPress添加投稿功能(无需注册/可邮件通知站长和投稿人) >中分享过,通过修改主题文件实现游客快捷投稿的功能,但是有部分同学就是不太会动手,那么今天就分享一个WordPr ...
- AC日记——文化之旅 洛谷 P1078
文化之旅 思路: 暴搜,倒搜: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 105 #define max ...
- 【转载】C++ typedef用法小结
http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替 ...
- css自媒体查询
准备工作1:设置Meta标签 首先我们在使用Media的时候需要先设置下面这段代码,来兼容移动设备的展示效果: <meta name="viewport" content=& ...
- 2018 ACM-ICPC 焦作网络赛
Problem A Problem B 简单题,做下背包就好了. Problem C Problem D Problem E Problem F Problem G Problem H Problem ...
- Spring源码分析之Bean的加载流程
spring版本为4.3.6.RELEASE 不管是xml方式配置bean还是基于注解的形式,最终都会调用AbstractApplicationContext的refresh方法: @Override ...
- python3中使用xpath无法定位,为什么一直返回空列表?
tbody问题: 在爬去某些网站一些信息的时候,xpath工具上显示类容是正确的,但是在scrapy代码中一直返回空列表 Scrapy的部分代码: class LotteryspiderSpider( ...
- MC资源整理
MC模拟简介 蒙特卡罗模拟,因摩纳哥著名的赌场而得名.它能够帮助人们从数学上表述物理.化学.工程.经济学以及环境动力学中一些非常复杂的相互作用. 蒙特卡罗(Monte Carlo)方法,又称随机抽样或 ...
- Arduino可穿戴开发入门教程LilyPad和LilyPad Simple的介绍
Arduino可穿戴开发入门教程LilyPad和LilyPad Simple的介绍 LilyPad和LilyPad Simple的介绍 LilyPad和LilyPad Simple是LilyPad微控 ...
- Codeforces 555 C. Case of Chocolate
\(>Codeforces \space 555 C. Case of Chocolate<\) 题目大意 : 有一块 \(n \times n\) 的倒三角的巧克力,有一个人要吃 \(q ...