前端工程化之:webpack1-3(模块化兼容性)

一、模块化兼容性

由于 webpack 同时支持 CommonJs 和 ES6 module ,因此需要理解它们互操作时 webpack 是如何处理的。

二、同模块化标准

如果导出和导入使用的是同一种模块化标准,打包后的效果和之前所说的模块化没有任何差异。

CommonJS:

javascript 复制代码
// 导出
module.exports = {
  a: 1,
  b: 2,
  c: 3
}

// 导入
require("./a")


// 导入的结果
{
  a: 1,
  b: 2,
  c: 3
}

ES6 Module:

javascript 复制代码
// 导出
export var a = 1;
export var b = 2;
export default 3;

// 导入1
import * as obj from "./a"

// 导入结果1
{
  a:1,
  b:2,
  default:3
}

// 导入2
import c from "./a"

// 导出结果2
3

三、不同模块化标准

不同的模块化标准, webpack 按照如下的方式处理。

ES6 Module export + CommonJS require:

javascript 复制代码
// 导出
export var a = 1;
export var b = 2;
export default 3;

// 导入
require("./a")

// 导入结果
{
  a:1,
  b:2,
  default:3
}

CommonJS export + ES6 Module import:

javascript 复制代码
// 导出
module.exports = {
  a: 1,
  b: 2,
  c: 3
}

// 导入1
import * as obj from "./a"
import c  from "./a"

// 导出结果
{
  a:1,
  b:2,
  c:3
}

四、最佳实践

代码编写最忌讳的是精神分裂,选择一个合适的模块化标准,然后贯彻整个开发阶段。

绝大部分第三方库,使用的是 CommonJS 的方式导出。

相关推荐
山楂树の11 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪11 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader12 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父12 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端
编程老船长12 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
Wect12 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript
漫游的渔夫12 小时前
前端开发者做 Agent:别写成一次请求,用 5 步受控循环防止 AI 乱跑
前端·人工智能·typescript
kyriewen13 小时前
Webpack vs Vite:一个是“老黄牛”,一个是“猎豹”,你选谁?
前端·webpack·vite
打小就很皮...13 小时前
html2canvas + jsPDF 生成 PDF 的踩坑与解决方案总结
前端·pdf
全栈前端老曹14 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09