AMD&CMD&CommonJS&RequireJS
2017-07-26 13:32
393 查看
AMD
AMD是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。
RequireJS
使用:data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。
AMD模块的写法
加载非规范的模块
require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。
CMD
参考文档:
https://github.com/seajs/seajs/issues/277
http://blog.chinaunix.net/uid-26672038-id-4112229.html
AMD是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。
require(['math'], function (math) { math.add(2, 3); });
RequireJS
使用:data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
<script src="js/require.js" defer async="true" data-main="js/main"></script>
使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。
require.config({ paths: { "jquery": "lib/jquery.min", "underscore": "lib/underscore.min", "backbone": "lib/backbone.min" } }); 或者: require.config({ baseUrl: "js/lib", paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
AMD模块的写法
// math.js define(function (){ //所有功能方法 var add = function (x,y){ return x+y; }; //暴露的方法 return { add: add }; }); require(['math'], function (math){ alert(math.add(1,1)); }); 额外:如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。 define(['myLib'], function(myLib){ function foo(){ myLib.doSomething(); } return { foo : foo }; });
加载非规范的模块
require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。
require.config({ shim: { 'underscore':{ exports: '_' }, 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' } } });
CMD
define(function(require, exports) { // 获取模块 a 的接口 var a = require('./a'); // 调用模块 a 的方法 a.doSomething(); });
参考文档:
https://github.com/seajs/seajs/issues/277
http://blog.chinaunix.net/uid-26672038-id-4112229.html
相关文章推荐
- CommonJS AMD CMD UMD RequireJS的区别
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
- Webpack - CommonJs & AMD 模块打包器
- commonJS\AMD\CMD
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
- js-JavaScript规范:CommonJS/AMD/CMD
- Javascript模块化编程系列二: 模块化的标准化(CommonJS & AMD)
- commonjs AMD,CMD
- AMD/CMD/commonjs/ESM
- 关于 CommonJS AMD CMD UMD
- 关于 CommonJS AMD CMD UMD 规范的差异总结
- Javascript模块化编程系列二: 模块化的标准化(CommonJS & AMD)
- AMD. CMD. UMD. CommonJS
- 关于 CommonJS AMD CMD UMD 规范的差异总结
- Writing Modular JavaScript With AMD, CommonJS & ES Harmony
- 关于 CommonJS AMD CMD UMD 规范的差异总结
- 研究一下javascript的模块规范(CommonJs/AMD/CMD)
- CommonJs AMD CMD 模块加载
- requirejs加载远程非AMD规范js及和seajs规范CMD比较
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述