- 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语法来导入\出依赖,支持异步加载