模块化演变历史

stage-1: 文件划分

  • 污染全局变量
  • 命名冲突
  • 无法管理依赖

    stage-2: 命名空间方式

    stage-3: LLFE立即执行

于是出现了模块化这个概念

模块化方式

commonJs

  • 一个文件就是一个模块
  • 每个模块都有单独的作用域
  • 通过module.exports导出成员
  • 通过require函数载入木块

    AMD(Asynchronous Module Definition)

    依赖require,js ```javascript //定义一个模块 define(“module1”,[“Jquery”,”./module2”],function(){ return {
    1. start: function(){}....
    } })

//载入一个模块 require([‘module1’], function(module1){ module1.start(); })

  1. <a name="VqeYi"></a>
  2. ## CMD
  3. 依赖Sea.js
  4. ```javascript
  5. //所以模块都通过define来定义
  6. define(function(require,exports,module){
  7. module.exports=...;
  8. })

ESModules

  • 自动采用严格模式,忽略”use”strict”
  • 每个ESM模块都是单独的私有作用域
  • ESM是通过CORE去请求外部js模块
  • ESM的script标签会延迟执行脚本