> 认识AMD、CMD、UMD、CommonJS
> ### 1、AMD(Asynchromous Module Definition - 异步模块定义)
> > AMD是RequireJS在推广过程中对模块定义的规范化产出,AMD是异步加载模块,推崇依赖前置。
```
define('module1', ['jquery'], ($) => {
//do something...
});
```
> ### 2、CMD(Common Module Definition - 公共模块定义)
> > CMD是SeaJS在推广过程中对模块定义的规范化产出,对于模块的依赖,CMD是延迟执行,推崇依赖就近。
```
define((require, exports, module) => {
module.exports = {
fun1: () => {
var $ = require('jquery');
return $('#test');
}
};
});
```
> >如上代码,只有当真正执行到fun1方法时,才回去执行jquery。
> >同时CMD也是延自CommonJS Modules/2.0规范
>
> ### 3、CommonJS
> >提到CMD,就不得不提起CommonJS,CommonJS是服务端模块的规范,由于Node.js被广泛认知。
>>根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的module.exports对象。
```
//file1.js
moudle.exports = {
a: 1
};
//file2.js
var f1 = require('./file1');
var v = f1.a + 2;
module.exports ={
v: v
};
```
>>CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作。像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。但如果是浏览器环境,要从服务器加载模块,这是就必须采用异步模式。所以就有了 AMD CMD 解决方案。
> ### 4、UMD(Universal Module Definition - 通用模块定义)
> > UMD是AMD和CommonJS的一个糅合。AMD是浏览器优先,异步加载;CommonJS是服务器优先,同步加载。
> >既然要通用,怎么办呢?那就先判断是否支持node.js的模块,存在就使用node.js;再判断是否支持AMD(define是否存在),存在则使用AMD的方式加载。这就是所谓的UMD。
```
((root, factory) => {
if (typeof define === 'function' && define.amd) {
//AMD
define(['jquery'], factory);
} else if (typeof exports === 'object') {
//CommonJS
var $ = requie('jquery');
module.exports = factory($);
} else {
//都不是,浏览器全局定义
root.testModule = factory(root.jQuery);
}
})(this, ($) => {
//do something... 这里是真正的函数体
});
```
- CSS
- 长度单位
- 问题们
- 背景渐变
- 禁止用户选中
- 给富文本重置样式
- 移动端常见小问题
- bfc
- flex
- 父元素没有包裹子元素的margin
- VUE
- 原理
- 生命周期
- vue-router原理
- 动态修改路由参数
- 在新窗口打开页面
- 连跳两个页面
- 跳转页面自动回到顶部
- vue+webpack项目,停留一段时间报错
- vue 路由去掉#
- webpack编译目录设置
- config配置
- HTTP
- HTTP状态码
- HTTP1.0,HTTP1.1,HTTP2.0
- axios和ajax的区别
- 模块化
- git
- 比较
- 查看远程仓库地址
- git flow
- 比较分支的不同并保存压缩文件
- Tag
- 回退
- node版本管理
- npm
- 确定用户是否在当前页面
- 前端下载文件
- 只能在微信中访问
- 下载图片
- webpack修改路径为相对路径
- 打开新页面-被浏览器拦截
- textarea高度随内容变化
- Debian/Ubuntu 安装shadowsock
- 垂直居中
- video
- 去掉ios原始播放大按钮
- 前端直播
- ios系列
- js弹出错误代码
- nginx在MAC上的安装、启动、重启和关闭
- 解析latex格式的数学公式
- Mac 新建unix可执行文件
- 正则-格式化a链接
- 原型
- unicode解析
- vue+webpack打包优化
- 各种JS题
- ES6
- seo
- React
- 兼容性
- canvas
- zsh