Requirejs 使用

代码地址

参考地址1

参考地址2

一、不依赖其他模块的module创建

  1. 创建math的module
// math.js
define(function (){
var add = function (x,y){
return x+y;
};
return {
add: add
};
});
  1. 将require引入的js全部写在html(当然可以用data-main属性)
<body>
<div class="box">box</div>
<script type="text/javascript" src="lib/require.js"></script>
<script type="text/javascript">
require(['./js/math'], function(math) {
var box = document.querySelector('.box')
box.innerText = math.add(1, 1);
});
</script>
</body>

或者

<head>
<script type="text/javascript" src="lib/require.js" ></script>
<script type="text/javascript" defer async="true">
require(['./js/math'], function(math) {
var box = document.querySelector('.box')
box.innerText = math.add(1, 1);
});
</script>
</head>

二、 引入jquery

由于jquery本身是没有通过defined(虽然它源码是用requirejs开发的),单独引入jquery,然后执行jquery语法代码,显然会报错。(同样的道理,在seajs也是一样的)。

requirejs提供require.config()

<body>
<div class="box"></div>
<script type="text/javascript" src="lib/require.js"></script>
<script type="text/javascript" defer async="true">
require.config({
paths: {
"jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "./lib/jquery"],
}
})
require(["jquery"], function($) {
$(function() {
$('.box').css({
'width':'100px',
'height':'100px',
'background':'red',
'border-radius':'10px'
})
})
})
</script>
</body>

说明: 通常情况下现在加载CDN下jquery,如果没有才加载本地的jquery文件。

当然自己定义的模块,也可以通过这种方式调用了。如下:

<body>
<div class="box">box</div>
<script type="text/javascript" src="lib/require.js"></script>
<script type="text/javascript" defer async="true">
/* 第一种
require(['./js/math'], function(math) {
var box = document.querySelector('.box')
box.innerText = math.add(1, 1);
});
*/
// 第二种
require.config({
paths: {
'math': './js/math'
}
});
require(['math'], function(math) {
var box = document.querySelector('.box');
box.innerText = math.add(1, 2);
})
</script>
</body>

三、模块依赖

  1. 创建boxText模块,可以直接依赖 jquery 模块。
define(['jquery'],function() {
var addText = function () {
$('.box').text('box').css({
'line-height': '100px',
'text-align': 'center',
'color': '#fff'
})
}
var removeText = function() {
$('.box').text('');
}
return {
addText: addText,
removeText: removeText
}
})
  1. 创建boxStyle模块,可在调用是在require.config中使用shim
define(function() {
var green = function() {
$('.box').css({
'background-color': 'green'
});
};
var red = function() {
$('.box').css({
'background-color': 'red'
})
}
return {
green: green,
red: red
}
})

index.html

require.config({
path: {
'boxStyle': 'file\path\boxStyle'
},
shim: {
"boxStyle": {
exports: 'boxStyle',
deps: ['jquery']
}
}
})

模块之间的依赖如果是通过require,并没有通过require.config来定义,那只能通过require来依赖

//req/demo6.html

require.config({
paths: {
"jquery": ["http://libs.baidu.com/jquery/2.0.3/jquery", "./lib/jquery"],
},
});
require(['jquery','./js/attr/index'], function($, attr) {
$(function() {
attr.remove();
attr.add();
})
})

req/js/attr/index.js

define(['./remove','./add'],function(remove,add){
return {
remove: remove,
add: add
}
})

req/js/attr/add.js

define(['jquery'],function($) {
function add() {
console.log('addattr');
$('body').css('background','#ddd');
}
return add;
})

req/js/attr/remove.js

define(function(){
function remove() {
console.log('removeattr');
} return remove
})

seajs,当初找着文档演示一篇。当时发现requirejs方便,但现在一直使用。现在es6的模块流行,所以没在学习seajs,也不打算学习seajs。

上一篇:.net框架


下一篇:Docker创建MySQL容器环境两部曲