历史
JS诞生之初面向简单页面开发, 没有模块的概念。
后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块;
之前也有雅虎的实践,使用命名空间 作为模块名。
最后衍生出 面向各种使用场景 的 JS 模块标准。
例如:
面向浏览器的 AMD
面向Nodejs的 CommonJS
对于这种分裂状态ES标准也在尽力弥合。 但是目前流行的实践是 UMD模式。
AMD
https://www.davidbcalhoun.com/2014/what-is-amd-commonjs-and-umd/
Asynchronous Module Definition (AMD) has gained traction on the frontend, with RequireJS being the most popular implementation.
Here’s module foo with a single dependency on jquery:
// filename: foo.js
define([‘jquery‘], function ($) {
// methods
function myFunc(){};
// exposed public methods
return myFunc;
});
And a little more complicated example with multiple dependencies and multiple exposed methods:
// filename: foo.js
define([‘jquery‘, ‘underscore‘], function ($, _) {
// methods
function a(){}; // private because it‘s not returned (see below)
function b(){}; // public because it‘s returned
function c(){}; // public because it‘s returned
// exposed public methods
return {
b: b,
c: c