基本使用
CMD英文全称 Common Module Definition(通用模块定义);
NodeJS就是CMD规范的
CMD规范的实现:commonjs 、seajs、nodejs
我们以seajs举例实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script src="./js/sea.js"></script> <script> seajs.use("./js/main.js") </script> </body> </html>
上面是引入sea.js文件后向外暴露一个seajs的方法,内部的参数是引导文件路径
main.js文件
define(function (require, exprots, module) { var yuan = require("../outer/yuan.js"); var ju = require("../outer/ju.js"); alert(yuan.mianji(1)) alert(ju.mianji(1,2)) });
ju.js文件
define(function (require, exprots, module) { function mianji(a,b) { return a * b; } exprots.mianji = mianji });
yuan.js文件
define(function (require, exprots, module) { function mianji(r) { return 3.14 * r * r; } exprots.mianji = mianji });
define这个外壳就是CMD规范的外壳,我们之前学习的NodeJS是可以不带外壳的CMD规范,所以就知道了require、exports、module都是从何而来的了,都是从CMD规范封装的方法中来的
CMD和AMD规范的区别
AMD规范是中的require方法异步的,依赖模块是没有加载顺序之分的,所有的模块加载完毕后执行回调函数
require(['yuan', 'ju'], function (yuan, ju) { alert(yuan.mianji(1)) alert(ju.mianji(1,2)) }) alert("0000")
此时会发现0000先输出
require里面的语句是异步语句,把依赖项目都加载完毕后才执行回调函数,这个就是异步的由来
CMD规范中的require方法是同步的
define(function (require, exprots, module) { var yuan = require("./yuan"); var ju = require("./ju"); alert(yuan.mianji(1)) alert(ju.mianji(1, 2)) alert("0000") });
目前主要使用cmd规范