CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
AMD规范则是非同步加载模块,允许指定回调函数。由于node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,
所以CommonJs规范比较适用,但是,如果是浏览器环境,要从服务端加载模块,这是就必须采用非同步模块,因此浏览器端一般采用AMD规范
此外AMD规范比CommonJS规范在浏览器端实现要来的早
(1)AMD规范基本语法
定义暴露模块:
1 | //定义没有依赖的模块 |
(2)未使用AMD规范与使用require.js
通过比较两者的实现方法,来说明使用AMD规范的好处
1.未使用AMD规范
1 | // dataService.js文件 |
这种方式确定很明显:首先会发送多个请求,其次引入的js文件顺序不能搞错,否则会报错!
2.使用require.js
RequireJS是一个工具库,主要用于客户端的模块管理。
它的模块管理遵守AMD规范,RequireJS的基本思想是,通过define方法,将代码定义为模块;
通过require方法,实现代码的模块加载。接下来介绍AMD规范在浏览器实现的步骤:
①下载require.js, 并引入
官网:
github :
然后将require.js导入项目: js/libs/require.js
②创建项目结构
1 | |-js |
③定义require.js的模块代码
1 | // dataService.js文件 |
1 | // index.html文件 |
④页面引入require.js模块:
在index.html引入 <script data-main="js/main" src="js/libs/require.js"></script>
此外在项目中如何引入第三方库?只需在上面代码的基础稍作修改:
1 | // alerter.js文件 |
上例是在alerter.js文件中引入jQuery第三方库,main.js文件也要有相应的路径配置。
小结:通过两者的比较,可以得出AMD模块定义的方法非常清晰,不会污染全局环境,能够清楚地显示依赖关系。
AMD模式可以用于浏览器环境,并且允许非同步加载模块,也可以根据需要动态加载模块。