前端打包产物 cjs /es/umd 区别详解

发布时间:2026/8/27 10:31:50

前端打包产物 cjs /es/umd 区别详解
前端打包产物 cjs /es/umd 区别详解一、先搞懂三个产物对应什么规范cjs → CommonJSNode 原生模块规范es / esm → ES Module(ESM)ES6 官方原生模块umd → Universal Module Definition兼容多环境通用打包格式二、核心区别总览表对比项cjs (CommonJS)es (ESM)umd标准Node.js CommonJSES6 Module兼容封装方案导入语法require()import自动适配 require / define / 全局变量导出语法module.exportsexport / export default自动判断环境导出加载时机运行时动态加载编译期静态解析运行时判断环境Tree-Shaking❌ 不支持✅ 完美支持❌ 不支持运行环境Node.js、旧打包工具现代浏览器、Vite/Webpack5、新版 Nodescript 标签、Node、RequireJS 全兼容文件后缀.js.mjs / “type”:“module” 的 .js.js典型用途给 Node 直接引用业务项目打包、体积优化CDN 直接 script 引入、兼容老旧项目三、分别详细讲解1. cjsCommonJS输出代码示例// dist/cjs/index.cjsconstadd(a,b)ab;exports.addadd;module.exports{add};特点同步运行时加载代码执行阶段才解析依赖不支持 Tree-Shaking所有代码全部打包进文件无法删除未使用代码Node 默认识别格式require(‘xxx’) 导入导出是值拷贝内部变量更新外部不会同步适合场景后端 Node 项目直接引入依赖包老旧 Webpack 项目未开启 ESM 解析。缺点打包体积更大现代前端工程不会优先使用。2. es / esmES Module输出代码示例// dist/es/index.jsexportconstadd(a,b)ab;exportdefault{add};特点静态模块import/export 必须写在顶层编译期就能分析依赖支持 Tree-Shaking打包工具自动剔除没导入的函数、变量大幅减小产物体积浏览器原生支持适用场景Vue / React / Vite 前端业务项目希望打包体积最小、做按需引入库开发者给现代打包工具使用。3. umdUniversal Module Definition 通用模块输出代码简化示例(function(root,factory){// AMD 判断RequireJSif(typeofdefinefunctiondefine.amd){define(factory);}// CommonJS 判断Nodeelseif(typeofmoduleobjectmodule.exports){module.exportsfactory();}// 浏览器全局 scriptelse{root.myLibfactory();}})(this,function(){constadd(a,b)ab;return{add};});特点一段代码自动兼容三种环境浏览器直接 script、Node require、RequireJS AMD包裹一层自执行函数代码冗余不支持 Tree-Shaking挂载全局变量CDN 直接引入最方便适用场景CDN 通过四、package.json 字段如何对应这三种产物库项目打包后会在 package.json 配置不同入口打包工具自动择优选用{main:dist/cjs/index.js,// Node 默认读取 cjsmodule:dist/es/index.js,// Webpack/Vite 读取 esm 做 Tree-Shakingunpkg:dist/umd/index.umd.js,// CDN 使用 umdexports:{.:{import:./dist/es/index.js,require:./dist/cjs/index.js}}}main给 Node require 使用指向 cjsmodule现代打包工具识别优先使用 es 产物开启 Tree-Shakingunpkg/jsdelivrCDN 访问加载 umdexports新版标准区分 import / require 分别指向 es /cjs。五、开发 / 打包怎么选业务前端项目Vite/Webpack5优先读取 module 字段使用 es 产物打包体积最小Node 后端项目使用 require读取 main 对应的 cjs需要 CDN 直接 script 引入使用 umd自己开发工具类库三种都输出同时配置 main、module、unpkg 兼容所有场景。六、一句话总结区别cjs给 Node 用不支持摇树es现代前端打包最优解支持 Tree-Shaking体积最小umd兼容所有老旧环境CDN 直接引入专用冗余无摇树。

相关新闻

TPA3128D2与STM32F446ZE音频系统设计与优化

TPA3128D2与STM32F446ZE音频系统设计与优化

2026/8/22 19:55:08

1. TPA3128D2音频放大器核心特性解析TPA3128D2是德州仪器推出的一款高效D类音频放大器芯片,专为追求高音质和低功耗的应用场景设计。这款芯片在4.5V至26V的宽电压范围内工作,能够提供30W立体声或60W单声道的强劲输出功率。作为一名长期从事音频设备开发的…

Linux系统中的权限管理及优化

Linux系统中的权限管理及优化

2026/8/27 1:33:18

一.权限的概念在 Linux 系统的架构里,权限是构建安全堡垒的基石,精准界定了不同用户对文件与目录的操作边界, 对系统安全的维护以及数据完整性的保障起着决定性作用。Linux 将权限归纳为读(r)、写(w&#x…

Java 并发编程(六)|并发进阶高频:CAS、锁升级

Java 并发编程(六)|并发进阶高频:CAS、锁升级

2026/8/27 4:33:25

并发进阶前言常见的锁策略乐观锁 VS 悲观锁重量级锁 VS 轻量级锁自旋锁 VS 挂起等待锁读写锁可重入锁 VS 不可重入锁公平锁 VS 非公平锁synchronized 锁的策略CAS认识CAS应用CAS实现原子类实现自旋锁CAS的ABA问题synchronized 原理锁升级锁消除锁粗化全文总结🔗 系列…

回源慢3秒,AI直接跳过你

回源慢3秒,AI直接跳过你

2026/8/27 10:27:43

很多技术团队把CDN当成"让网站变快"的选配插件,觉得只要买了CDN服务就万事大吉。但在GEO时代,这个认知差得有点远。AI爬虫(GPTBot、ClaudeBot、PerplexityBot等)的抓取逻辑和Googlebot完全不同:它们的耐心阈…

大模型应用开发社招常考面经(python八股篇)(下)

大模型应用开发社招常考面经(python八股篇)(下)

2026/8/27 10:27:43

14. 类型提示 Pydantic def add(a: int, b: int) -> int: # 类型提示(运行时不强制) return a b from pydantic import BaseModel # FastAPI 数据校验 class Item(BaseModel): name: str price: float 0.0 # 默认值 tags: list[str] []…

Nano-VLLM全代码解析笔记(8)-qwen3与qwen3_moe

Nano-VLLM全代码解析笔记(8)-qwen3与qwen3_moe

2026/8/27 10:27:43

当前笔记顺序 Engine->Layers->Models(当前Qwen3-0.6B与Qwen3-30B-A3B) (Qwen3-0.6B)qwen3.py Qwen3-0.6B是稠密架构,没有什么好讲的,跟transformer的decoder写法差不多,定义attention和mlp层,用at…

PLC编码器测速:中心差分法与自适应滤波算法解决低速跳变难题

PLC编码器测速:中心差分法与自适应滤波算法解决低速跳变难题

2026/8/27 10:27:43

1. 项目缘起:从“跳变”到“稳定”的测速挑战 在工业自动化现场,尤其是伺服电机、主轴驱动这类对速度反馈精度和实时性要求极高的场景,编码器测速的稳定性是控制系统能否平稳运行的基石。然而,任何一个在现场摸爬滚打过的工程师&a…

Node系列 · ORM:MD5 加密

Node系列 · ORM:MD5 加密

2026/8/27 10:27:43

Node系列 ORM:MD5 加密MD5 是 Node 后端最早接触的"加密"工具——给密码做哈希、给文件生成指纹。但 MD5 在 2004 年已被攻破,不再适合用于安全场景。本章讲清楚 MD5 的本质、它在哪些场景能用、哪些场景必须换方案。一、MD5 是什么 MD5&…

三步装好Notepad++ Markdown实时预览:MarkdownViewer++插件完整指南

三步装好Notepad++ Markdown实时预览:MarkdownViewer++插件完整指南

2026/8/27 10:17:43

三步装好Notepad Markdown实时预览:MarkdownViewer插件完整指南 【免费下载链接】MarkdownViewerPlusPlus A Notepad Plugin to view a Markdown file rendered on-the-fly 项目地址: https://gitcode.com/gh_mirrors/ma/MarkdownViewerPlusPlus 写完表格的最…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

2026/8/27 0:07:12

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

2026/8/27 0:07:12

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

2026/8/27 0:07:12

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…