seajs

前端模块化,AMD和CMD的区别总结

夙愿已清 提交于 2019-11-30 14:24:10
AMD和CMD都是浏览器端的js模块规范,2者的区别总结如下: 1、AMD推崇依赖前置,CMD推崇就近依赖 //AMD: mod.js define([ 'dependency1' , 'dependency2' ], function (require, exports, module){ //TODO module.exports = {}; }); //CMD: mod.js define( function (require, exports, module) { var $ = require( 'jquery.js' ) if ( true ) { let a = require( './a.js' ); //TODO } module.exports = {} }); 这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法 2、执行时机不同:AMD是加载完立即执行,CMD是延迟执行(二者的最大区别) 立即执行比较好理解,我们来看CMD的延迟执行。 还是以上面代码为例 //CMD: mod.js define( function (require, exports, module) { var $ = require( 'jquery.js' ) if ( true ) { let a = require( './a.js' ); /

前段模块化seajs(2)

人盡茶涼 提交于 2019-11-30 03:20:54
一、模块化配置信息 seajs config 用于配置seajs的一些选项参数,接受一个对象,该对象的属性值就是我们的配置项目 配置信息基本语法: 在seajs.use()上边: seajs.config({ alias:{}, paths:{} }) 1.alias定义模块别名 当我们在项目中引入一些基础类库,经常会涉及到类库的版本升级问题,才是每个模块都引入了类库,那么升级就需要修改每个模块中的名字,风险比较大, 如果使用alias定义这个模块(类库)、使用别名调用,更新只需要更新版本号,就可以做到全局更新 eg: jq:jquery-1,12.2.min.js 所有模块中都使用jq,如果我将这个版本改为jq:jquery-1.5.min.js 所有使用了jq的模块中的jquery都会变为1.5的版本 2.paths 路径配置 当模块目录比较深的时候,或者需要跨目录调用模块时,可以使用paths简化路径 也可以使用{}匹配语法调用变量(vars) eg: require('header/skin/top/top') ===> paths:{ h:'header/skin/top' } require('h/top'); 3.vars 声明变量 有些场景下,模块路径在运行时才能确定(动态处理),这是可以使用vars变量来配置 如果模块开发时路径比较复杂

AMD 和 CMD 的区别有哪些?

≡放荡痞女 提交于 2019-11-27 02:11:18
AMD 规范在这里: https:// github.com/amdjs/amdjs- api/wiki/AMD CMD 规范在这里: https:// github.com/seajs/seajs/ issues/242 AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。 CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。 类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。 还有不少⋯⋯ 这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。 目前这些规范的实现都能达成浏览器端模块化开发的目的。 区别: 1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码: // CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b