前端模块化

198 阅读1分钟
  1. cjs 相信大家不陌生,它就是运行在node端的commonJS使用require来加载模块,不支持浏览器端,没有依赖前置的概念,只有在执行后才能拿到依赖信息
const $=require('juqery')
const tmp = () =>{
    console.log('---tmp')
}
module.exports = tmp

2.amd 异步的cjs 依赖前置 适用于浏览器端

define(['jquery'],() => {
    ...
})

3.umd 一套代码支持cjs和amd两种规范

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node, CommonJS之类的
        module.exports = factory(require('jquery'));
    } else {
        // 浏览器全局变量(root 即 window)
        root.returnExports = factory(root.jQuery);
    }
}(this, function ($) {
    //    方法
    function myFunc(){};

    //    暴露公共方法
    return myFunc;
}));

4.iife 立即函数调用表达式 可以有效解决命名冲突的问题 以及全局变量污染作用域的问题

const module = (() => {
    ...
})()

5.esm 这个是现在用到最多的一种模块化,使用es6语法来导入\出依赖,支持异步加载