模块化的出现是因为,前端开发遇到了问题,正是这些问题导致了技术的迭代和进步
实际问题
全局函数模式:将不同的功能封装成不同的全局函数
var name = '怪诞咖啡';
function getName(){
console.log(name);
}
name=x
namespace
模式:简单对象封装var obj = {
name:'怪诞咖啡',
getName(){
console.log(this.name);
}
};
obj.name
(function(w){
let name = '怪诞咖啡';
function getName(){
console.log(name);
}
w.module = {
getName:getName
};
})(window);
(function(w){
let name = '怪诞咖啡';
function getName(){
console.log(name);
}
w.getName = getName;
})(window);
CommonJS:node就是基于此,进行模块化开发的
AMD
CMD:只了解,阿里人写的,适用范围不广;卖给了国外,很可能某一天就不能用了
es6
问题
require
浏览器不支持,需要提前编译打包处理基本语法
暴露模块
module.exports = value;
export.xxx = value;
本质是
exports
exports
最初是一个空变量,我们就行暴露,实际就是把要提供的功能,赋值给exports
变量
引入模块
require(xxx);
服务器端实现
浏览器端实现
语法
export
import
使用-分别暴露
export var age = 1;
export var job = 2;
使用-统一暴露
var age = 1;
var job = 2;
export {age,job}