CMD模块规范

1.1 CMD规范说明

专门用于浏览器端,并且模块的加载是异步的,而且只有模块使用时才会加载执行;

CMD规范的语法类似于Commonjs + AMD ——定义模块使用AMD语法,暴露变量、引入模块使用Commonjs语法

1.2 基本语法

使用全局函数define定义模块,使用export暴露模块,使用require引入模块

1.21暴露模块

(1)定义一个没有依赖的模块,定义模块使用define函数,传入一个函数,函数参数为require,exports,module,require参数用来引入模块,后面两个参数用来暴露模块,暴露模块的方法和Commonjs规范一样,可以使用module.exports或者exports

// module1.js
define(function(require,exports,module){
let name = '过青年';
function getName(){
return name;
} module.exports = {name,getName};
});

(2)定义一个有依赖的模块

​ 目录结构如下

  • 使用同步引入模块,同步可能导致堵塞
// module2.js
//同步引入
define(function(require,exports,module){
let module1 = require('./module1.js');
let age = 20;
console.log(module1.name);
console.log(module1.getName());
module.exports = {age};
})
  • 使用异步引入模块
// module2.js
// 异步引入
define(function(require,exports,module){
let age = 20;
// 引入模块暴露的对象作为实参传入m1形参中
require.async('./module1.js',function(m1){
console.log(m1.name);
console.log(m1.getName());
});
module.exports = {age};
})
1.22引入模块

记住引入模块可以使用同步引入require()和异步引入require.async()

// main.js同步引入模块
define(function(require,exports,module){
let m2 = require('./module/module2.js');
console.log(m2.age);
})
1.23在HTML页面上使用模块化

需要引入一个叫sea.js模块加载框架,再使用另外一个script标签,当中使用seajs.use()方法定义主模块

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AMD规范实例</title>
</head>
<body>
<script src="./js/lib/sea.js"></script>
<script>
seajs.use('./js/main.js'); /*控制台输出,module2.js模块中使用同步、异步输出差异:
同步 异步
过青年 20
过青年 过青年
20 过青年
*/
</script>
</body>
</html>

总结

  • 使用define(function(require,exports,module){ })定义模块

  • 在定义的模块中使用module.exports或者exports暴露对象

  • 使用require()函数同步加载模块或者使用require.async()异步加载模块

  • HTML中引入ser.js脚本,并且再添加一个script标签,使用serjs.use()方法指定主模块

最新文章

  1. React学习——ListView组件
  2. Solving “Dynamic Web Module 3.0 requires Java 1.6 or newer” in Maven Projects
  3. 转发(forward)和重定向(sendRedirect)
  4. Android--Intent传递对象
  5. PopupWindow的使用
  6. html中css三种常见的样式选择器 zz
  7. python&amp;MongoDB爬取图书馆借阅记录(没有验证码)
  8. mvc中ajax.beginform一次提交重复Post两次的问题解决
  9. 从零开始学ios开发(十):Multiview Applications(多个xib之前的切换)
  10. C# 使用xsd文件验证XML 格式是否正确
  11. 【原创翻译】Reducing Branch Delay to Zero in Pipelined Processors
  12. [Angular 2] Inject Service
  13. Sogou搜狗搜索引擎登录网站 - Blog透视镜
  14. 出现Data Tools 与VS 不兼容问题
  15. jQuery实现按键盘方向键翻页
  16. HTML最基础的入门(上)
  17. JS的Dom树小结
  18. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线
  19. Python的一个解释凯撒密码的程序
  20. odoo TransientModels must have log_access turned on

热门文章

  1. spring boot 配置虚拟静态资源文件
  2. 拿来即用:用C+JS结构来处理JSON数据
  3. 5、struct2使用登陆的时候重定向功能,如果没有登陆,重定向到登陆页面
  4. 入门大数据---Python基础
  5. 【树形dp】 bzoj1131 Sta
  6. .netcore 网站启动后 502.5
  7. 关于位图数据和标记位-P3
  8. pl/sql案例
  9. 朋友HDU - 5963 (思维题) 三种方法
  10. if与switch(break穿透)