一:模块化的由来
1.1:背景
项目的日渐庞大,对于抽离业务功能和基础功能需求越来越大,方便快速引入某个功能模块,对模块进行封装抽离
javascript早期设计中,没有类,模块,包的概念
封装模块的目的:
(1):提高代码的复用率
(2):方便查阅依赖关系,代码可读性
(3):变量冲突,方便维护
1.2:模块的特点:
(1):拥有独立的作用域--函数拥有独立作用域
(2):避免全局污染--对象(把实现的功能封装到对象中,文件名来定义模块名,保证清晰的看到模块的定义
(3):暴漏的接口,不能修改--立即执行函数(Immediately Invoked Function Expression)
如果最终模块抛出的对象,那么obj.xxx=yyy 是可以修改模块定义的接口功能
(function(){
return {
name:'xxx',
age:"yyy"
}
})()
1.3:模块开发遇到的问题:
(1):加载js的顺序
(2):有效处理依赖关系的维护
二、模块化的实现
https://github.com/seajs/seajs/issues/277 对比
commonJS
AMD
CMD
UMD
原生模块化
commonJS 与node之间关系 https://www.cnblogs.com/xiaohuochai/p/6847939.html
每一个文件就是一个模块,拥有自己独立的作用域、变量、以及方法等,对其他的模块都不可见CommonJS规范规定,每个模块内部,module 变量代表当前模块。这个变量是一个对象,它的 exports 属性(module.exports)是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。require 方法用于加载模块。
module :exports ,require
exports={}
module.exports={}
exports.a=xxx
require("../xxx")
网友评论