JavaScript 模块化
了解 JavaScript 的模块化,以及AMD,CMD的异同, SeaJS, RequireJS的简单介绍和应用
起源于nodejs, 将所有js分块,每一个块标准相同(即接口相同), 用时如同乐高将每一个块组合起来即可.
AMD规范
AMD是RequireJS对模块化的规范
- 异步加载,依赖前置,提前执行
- 定义模块方法:
define(['require','foo'], function(){ return })
- 加载模块方法(依赖前置):
require(['foo', 'bar'], function(foo, bar){ });
CMD规范
CMD是SeaJS对模块化的规范
- 同步加载,依赖就近,延迟执行
- 定义模块使用exports导出
define(function(require, exports, module){})
,其中module存储当前模块的一些对象 - 可使用require(modulename)直接引入, 也可使用require.async(modulename, callback)异步引入
除了AMD和CMD规范, 还有CommonJS Modules/2.0 规范
SeaJS入门上手
最新版本为3.0,于2014年6月更新,已经很久没更新
目录组织结构:1
2
3
4
5
6js
sea.js
m1.js
m2.js
main.js
index.html
1 | <script type="text/javascript" src="js/sea.js"></script> |
1 | // main.js |
1 | // m1.js |
1 | // m2.js |
DEMO截图:
Chrome下打印执行结果:
Chorme下加载文件顺序:
RequireJS入门上手
RequireJS和SeaJS有相似的地方,但是也有不同之处,但是实现的功能都是一样的,那就是将js模块化,写法和思想上有不同。
目录组织结构:1
2
3
4
5
6js
require.js
m1.js
m2.js
main.js
index.html
1 | <script type="text/javascript" data-main="js/main.js" src="js/require.js"></script> |
1 | // main.js |
1 | // m1.js |
1 | // m2.js |
执行结果截图: