公众号学习记录(二):前端模块化

128 阅读1分钟

为什么有前端模块化

前端代码的日益增多,避免命名冲突,更高复用性,更好的分离,按需加载。

模块化的历史

全局function模式(命名冲突) -> namespace,简单对象封装(外部可以直接修改内部数据)->IIFE问题(依赖)->IIFE增强(引入依赖),现代模块化的基石。

模块化规范的必要性:引入多个script出现的问题->请求过多,依赖模糊,难以维护。

CommonJS:

特点:同步加载,适用于服务端,加载一次缓存结果。浏览器端需要编译后执行。

语法:

暴露模块:

module.exports = value或exports.value = value

引入模块:

require(xxx)

AMD:

特点:异步加载,允许指定回调函数,适用于浏览器端。

语法:

定义:

define(['module1','module2'], function(m1, m2){
return 模块
})

使用:

require(['module1', 'module2'], function(m1, m2){
使用m1, m2
})

借助工具:RequireJS

CMD:

特点:用于浏览器端,模块加载是异步的,模块使用时才会加载执行。结合了CommonJS和AMD规范的特点。

定义暴露模块:

define(function(require, exports, module){
//引入依赖模块(同步)
var module2 = require('./module2')
//引入依赖模块(异步)
require.async('./module3', function (m3) {
})
//暴露模块
exports.xxx = value
})
引入模块:
define(function (require) {
var m1 = require('./module1')
var m4 = require('./module4')
m1.show()
m4.show()
})

借助工具:sea.js

ES6模块化: 特点:编译时确定依赖关系。

参考: github.com/ljianshu/Bl…