ES模块化

195 阅读1分钟

1.模块化只是思想

2.模块化演变过程

1.文件划分方式

  • 污染全局作用域
  • 命名冲突
  • 无法管理模块依赖关系
  • 原始方式完全依靠约定

2.命名空间方式

3.IIFE

4.模块化规范+模块化加载器

  • CommonJS,Node.js内置模块化方案
    • 一个文件就是一个模块
    • 每个模块都有单独的作用域
    • 通过module.exports导出成员,exports是其缩写
    • 通过require函数加载模块
    • 在程序启动的时候,以同步的方式导入模块,这也决定了在web端是不能采用的方案,因为会导致加载模块的时候页面卡死
  • AMD + require.js web端方案
  • Cmd + sea.js web端方案,阿里出品,已淘汰

3.模块化标准规范 + 最佳实践

node.js采用Commonjs规范,web端采用ES Modules规范

ES Modules特性

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

ES Modules注意的地方

  • ES Module可以导入CommonJS模块
  • CommonJS不能导入ES Module模块
  • CommonJS始终只会导出一个默认成员
  • 注意import不是解构导入对象
  • script标签上加入module代表以ES Module规范运行js模块化代码
  • script标签上加入nomodule,在这里面存放的代码,代表浏览器不支持ES Module的话,执行这里的代码。