AMD的好处
| 【示例】未使用AMD规范```javascript // dataService.js文件 (function (window) { let msg = ‘www.baidu.com’ function getMsg() { return msg.toUpperCase() } window.dataService = {getMsg} })(window)
```javascript// alerter.js文件(function (window, dataService) {let name = 'Tom'function showMsg() {alert(dataService.getMsg() + ', ' + name)}window.alerter = {showMsg}})(window, dataService)
// main.js文件
(function (alerter) {
alerter.showMsg()
})(alerter)
// index.html文件
<div><h1>Modular Demo 1: 未使用AMD(require.js)</h1></div>
<script type="text/javascript" src="js/modules/dataService.js"></script>
<script type="text/javascript" src="js/modules/alerter.js"></script>
<script type="text/javascript" src="js/main.js"></script>
最后得到如下结果:
这种方式缺点很明显:首先会发送多个请求,其次引入的js文件顺序不能搞错,否则会报错!
|
| —- |
实现
借助requireJS
一、RequireJS是一个工具库,主要用于客户端的模块管理。它的模块管理遵守AMD规范,RequireJS的基本思想是,通过define方法,将代码定义为模块;通过require方法,实现代码的模块加载。
二、requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)
步骤
一、下载require.js, 并引入
1、官网: http://www.requirejs.cn/
2、github : https://github.com/requirejs/requirejs
将require.js导入项目: js/libs/require.js
二、创建项目结构
|-js
|-libs
|-require.js
|-modules
|-alerter.js
|-dataService.js
|-main.js
|-index.html
三、定义require.js的模块代码
| 【示例】```javascript // dataService.js文件 // 定义没有依赖的模块 define(function() { let msg = ‘www.baidu.com’ function getMsg() { return msg.toUpperCase() } return { getMsg } // 暴露模块 })
```javascript
//alerter.js文件
// 定义有依赖的模块
define(['dataService'], function(dataService) {
let name = 'Tom'
function showMsg() {
alert(dataService.getMsg() + ', ' + name)
}
// 暴露模块
return { showMsg }
})
// main.js文件
(function() {
require.config({
baseUrl: 'js/', //基本路径 出发点在根目录下
paths: {
//映射: 模块标识名: 路径
alerter: './modules/alerter', //此处不能写成alerter.js,会报错
dataService: './modules/dataService'
}
})
require(['alerter'], function(alerter) {
alerter.showMsg()
})
})()
// index.html文件
<!DOCTYPE html>
<html>
<head>
<title>Modular Demo</title>
</head>
<body>
<!-- 引入require.js并指定js主文件的入口 -->
<script data-main="js/main" src="js/libs/require.js"></script>
</body>
</html>
| | —- |
四、页面引入require.js模块:
| 【示例】在index.html引入```javascript
|
| --- |
| 【示例```javascript
// alerter.js文件
define(['dataService', 'jquery'], function(dataService, $) {
let name = 'Tom'
function showMsg() {
alert(dataService.getMsg() + ', ' + name)
}
$('body').css('background', 'green')
// 暴露模块
return { showMsg }
})
| | —- |
2、在项目中引入第三方库
| 【示例】javascript
// main.js文件
(function() {
require.config({
baseUrl: 'js/', //基本路径 出发点在根目录下
paths: {
//自定义模块
alerter: './modules/alerter', //此处不能写成alerter.js,会报错
dataService: './modules/dataService',
// 第三方库模块
jquery: './libs/jquery-1.10.1' //注意:写成jQuery会报错
}
})
require(['alerter'], function(alerter) {
alerter.showMsg()
})
})()
|
| —- |
上例是在alerter.js文件中引入jQuery第三方库,main.js文件也要有相应的路径配置。
