模块化进程

webpack 模块化加载文件解析


 // 加载器runtime
  (function (modules: Array<Function>) {
    interface moduleType {
      exports:any,
      isLoad:Boolean,
      id:string
    }
    const installModules : {[key: string]: moduleType} = {};
    // 加载器
    const _webpack_require_ = function (moduleId:string) {
      // 已经加载直接返回
      if (installModules[moduleId]) {
        return installModules[moduleId].exports
      }
      // 初始化
      const module = installModules[moduleId] = {
        exports: {},
        isLoad: false,
        id: moduleId
      }
      // 加载文件
      modules[moduleId].call(module.exports, module, module.exports, _webpack_require_)
      module.isLoad = true
      
      //返回导出的对象
      return module.exports
    }

    // 加载唯一一个入口文件
    return _webpack_require_(0)
  }([
    // 依赖数组
    // 0
    function (module, exports, _webpack_require_) {
      const dependList = [_webpack_require_(1)]
      const result = (function (dependResult) {
        dependResult.aaa = 1
      }).call(exports, dependList)

      module.exports = result
    },
    // 1
    function () {

    }
  ]))
模块化的进程
  1. 原始模式,加载器选择通过<script>标签加载,然后通过各种hack判断是否加载完成。
  2. AMD => define({},function(dependList){}) // 依赖前置加载
  3. 引入服务端commonjs规范 => CMD => require() // 依赖就近加载
    3)通用加载定义 Umd 兼容AMDHE CMD 优先AMD 其次CMD 最后挂在window上

js模块化是针对原始的script必须严格按照加载顺序加载,且在使用阶段的js必须在最后加载的一种解决方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容