标签:web开发 机制 .config api 标签 es6 sdn 字符 对象
对于大型Web应用或者项目,动辄上万行的代码,给开发和后期维护带来了不小的麻烦。因此,需要有一种规范化的模块管理机制,帮助开发者集中处理模块的定义与调用关系。
在ES6正式出台前,已经有不少人致力于推出适合Web开发的模块化管理标准,CommonJS、AMD和CMD就是其中的成功代表。
以下为我查阅资料后,对三者最直观的理解:
通常被应用于服务器,实现代表:NodeJS。NodeJS相信大家都不陌生,它的出现成功将Javascript应用到了服务器端,使得前段开发者也能较为省力得转向后端开发,而无需学习一门新语言。
在服务器端,模块的加载和执行都在本地完成,因此,CommonJS并不要求模块加载的异步化。
AMD(异步模块加载)和CMD通常用于浏览器端,它们与CommonJS最明显的不同就是异步加载。AMD的实现代表是require.js,它也是require.js在推广过程中的附加产物。
requirejs.config({ config: { ‘bar‘: { size:‘large‘ }, ‘baz‘: { color: ‘blue‘ } } }); //bar.js直接使用module模块 define(function (require, exports, module) { var size = module.config().size; }); //baz.js使用了一个依赖数组,并要求一个特殊的依赖“module” define([‘module‘], function(module) { var color = module.config().color; });
当“some/newmodule”调用了“require(‘foo‘)”,它将获取到foo1.2.js文件;而当“some/oldmodule”调用“`require(‘foo‘)”时它将获取到foo1.0.js。
requirejs.config({ map: { ‘some/newmodule‘: { ‘foo‘: ‘foo1.2‘ }, ‘some/oldmodule‘: { ‘foo‘: ‘foo1.0‘ } } });
CMD(通用模块加载)是sea.js在推广过程中的产出,它与AMD主要有以下几点区别(来自seajs的官方阐述):
这形成了两种截然不同的加载方式:“预加载”和“懒加载”。AMD提前将所有模块的所有依赖加载完成后,才开始执行主流程;而CMD是遇到一个依赖开始加载,完成后执行当前流程,遇到下一个依赖再次去加载,然后再执行下一步。当然,同一模块的依赖之间仍然是异步加载的。
流程与AMD类似,不再赘述,只简单介绍seajs的API。
seajs.config({ // 变量配置 vars: { ‘locale‘: ‘zh-cn‘ } }); define(function(require, exports, module) { var lang = require(‘./i18n/{locale}.js‘); //=> 加载的是 path/to/i18n/zh-cn.js });
使用变量需要用花括号包围,如例中的{locale}。
标签:web开发 机制 .config api 标签 es6 sdn 字符 对象
原文地址:http://www.cnblogs.com/cjc917/p/7492569.html