前端模块化开发

248 阅读2分钟

一:模块化规范的出现

  1. CommonJS规范(nodeJS提出的一套标准)
  2. 就是一个文件一个模块,每个模块都有单独的作用域
  3. 通过module.exports导出成员,通过require函数载入成员
  4. CommonJS是以同步的方式去加载模块,所以这种方式再node中不会有问题,但是在浏览器会出现问题,这会导致浏览器效率低下,因为页面每次加载会导致大量的同步模块加载
  5. AMD(require.js)
  6. AMD使用起来比较复杂,它需要使用dwfind,require函数等
  7. 模块划分比较细的话,模块JS文件请求频繁导致页面效率低下
  8. Sea.js + CMD
  9. ES Modules

二:模块化标准规范

  1. 模块化的最佳实现就是在不同环境使用不同的标准
  2. 在node环境中遵循CommonJS规范
  3. 在浏览器环境中遵循ES Modules

三:ES-Module特性

  1. 在script标签中的type中添加module(type='module')
  2. ES Module自动采用严格模式,忽略 ‘use strict’
  3. 每个ES Module都是运行在单独的私有作用域中
  4. ES Module是通过CORS的方式去请求外部JS模块的,外部文件的地址需要支持CORS
  5. ES Module的script标签会延迟执行脚本(相当于defer)

四:ES-Module导出

  1. 关键字:export
  2. export
  3. export default

五:ES-Module导入导出的注意事项

  1. 导出的不是字面量对象,这是ES Modules的语法(export {})
  2. 导入的时候也不是解构,这是ES Modules得到语法(import {})
  3. 对外暴露成员,是暴露应用关系,而不是复制一份给予,并且是只读不能修改

六:ES-Module导入用法

  1. 后面的路径必须是完整的路径名称(例如 .js)
  2. 文件路径的./不能省略,否则ES Module会认为这是在加载第三方模块
  3. 文件路径可以是网络地址,可以引用cdn上的模块文件
  4. 如果不提去成员,只加载模块的话可以(import {这里不写成员} from 路径,或者import import '路径' 省略{} )
  5. 如果导入的成员特别多可以使用 * (import * as mod from '路径')这里表示将所有提取出来的成员放到了对象当中
  6. 动态加载模块import函数---import('路径'),这个函数返回的是一个promise对象
  7. 同时导出默认成员和命名成员,可以适应以下的方式