前言
使用requirejs在浏览器中加载模块,其实就只有3个主要的API:
require,require.config,define。
由于requirejs与require在全局作用域下是同一个API,我这里使用requirejs。
我之所以使用requirejs的原因:
requirejs在后续的define加载过程中,其会吧require重新绑定到另外一个函数,所以为了防止一些意外情况,我使用requirejs这个API来代替require这个API。
所以,我使用的API就三个:
requirejs,requirejs.config,define。
一般性使用
requirejs版本:2.3.6
这个使用办法应该是个万金油,什么情况都能往上套。
首先来说模块定义:
模块定义有多重形式,直接使用如下万金油形式。
//requirejs支持这种形式的模块定义
define(function(require,exports,module){
//这里是模块定义
var moduleA = require('./moduleA');
...一些模块代码定义
module.exports = {
//这里是需要导出的内容
};
});
官方模块定义形式:RequireJS API
模块加载配置:
requirejs.config({
baseUrl:"./",
paths:{
"app":"./app",
"jQuery":"./v1.0/",
}
});
//paths可以配置路径,方便在项目中随意切换模块版本。
经常使用的配置项就这两项。
baseUrl用于配置基础路径,所有模块的相对路径都根据这里来进行计算。
paths用于给路径一个别名,主要用途就是方便模块调用,有了它,就不用在调用模块的时候,写一长串的路径名了。
官方配置项文档:RequireJS API
模块载入入口:
模块载入入口有两种形式:data-main与index.html中内嵌。
这里使用index.html中内嵌:
<script src="./js/require.js"></script>
<script>
requirejs.config({
baseUrl:"js",
paths:{
"app":"./app",
}
});
requirejs(["app"],function(){
console.log("This is index.html,require app success!");
});
</script>
例子:
目录结构:
模块代码:
//moduleA.js
define(
function(require,exports,module) {
'use strict';
module.exports = {
helloA:function(){
console.log("I am moduleA! helloA!")
}
}
});
//app.js
define(
function(require) {
'use strict';
var moduleA = require('./lib/moduleA');
console.log("I am app! calling moduleA.hello!");
moduleA.helloA();
});
index.html的载入代码:
<script src="./js/require.js"></script>
<script>
requirejs.config({
baseUrl:"js",
paths:{
"app":"./app",
}
});
requirejs(["app"],function(){
console.log("This is index.html,require app success!");
});
</script>