模块化与打包

122 阅读1分钟

commjs规范

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

Amd模块化规范

ESModule规范

在html导入js脚本默认采用严格模式  

每个ESM运行在单独的私有作用域中

ESM是通过CORS请求外部js模块

ESM会延迟加载脚本优先渲染网页html和css,类似defer属性

export { name as fullname } //通过as关键词进行导出模块的重命名

import注意事项

import ( './module') //可以动态导入模块

import as mode form ('./module') //导出多个值通过mode.attr获取导出对象

default导出不用加{ },不加default导出要加{ }

esm与commonjs区别

  • esm可以导入commonjs模块
  • commonjs不能导入esm模块
  • commonjs始终导出一个默认成员
  • import不是解构对象

webpack模块加载方式

  • 遵循ES Module的import声明
  • 遵循Common JS的require函数
  • 遵循AMD的define和require函数
  • 样式代码中@import指令和URL函数
  • html中img的src属性

devtool几种模式对比

  • eval执行模块代码
  • cheap-source-map是否包含行信息
  • module能否得到loader处理之前的代码

几个坑

html-webpack-plugin配合自定义模板要加上html-loader规则

webpack版本选择4,webpack cli选择3