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

发布时间:2026/7/27 8:07:53

前端打包产物 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/7/26 9:17:40

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

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

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

2026/7/23 12:06:02

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

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

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

2026/7/23 17:58:38

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

Java后端面试7天冲刺:系统化复习八股文与场景题实战

Java后端面试7天冲刺:系统化复习八股文与场景题实战

2026/7/27 8:05:47

这次我们来看一个针对 Java 后端工程师的面试冲刺方案——“7天刷完面试所需的Java后端八股文”。这不是一个软件或模型,而是一套经过验证的高效学习路径和知识体系。对于正在求职或准备跳槽的 Java 开发者来说,最头疼的莫过于面对海量的面试题&#xff…

达梦数据库表空间创建与用户权限配置实战指南

达梦数据库表空间创建与用户权限配置实战指南

2026/7/27 8:05:47

1. 项目概述:为什么需要关注表空间与权限?最近在几个国产化替代的项目里,达梦数据库(DM Database)的出镜率越来越高。很多朋友刚接触时,会觉得它和Oracle、MySQL这些老朋友很像,上手就照着老经验…

学习笔记:LabVIEW调用DLL解析S19文件教程

学习笔记:LabVIEW调用DLL解析S19文件教程

2026/7/27 8:05:47

本教程将从零开始,手把手教你如何在 LabVIEW 中动态加载一个 DLL(HexS19ParserDLL),并利用其提供的函数解析 S19 格式的固件文件,最后在界面上显示解析结果和固件数据。准备工作安装好 LabVIEW(本教程使用 …

嵌入式系统外设保护与电源管理:从硬件寄存器到系统级设计

嵌入式系统外设保护与电源管理:从硬件寄存器到系统级设计

2026/7/27 8:05:47

1. 嵌入式系统外设保护与电源管理:从硬件寄存器到系统级设计 在嵌入式系统开发,尤其是汽车电子、工业控制这类对可靠性和功耗有极致要求的领域里,我们常常会听到“系统安全”和“低功耗设计”这两个词。听起来很宏大,但落到具体的…

c++高级数据结构之并查集

c++高级数据结构之并查集

2026/7/27 8:05:47

一.相关原理 1.概念 首先,我们得明晰,并查集在图形层面是什么——一片森林,也就是很多个不相交的集合(很多棵树)。 2.表示方式 像堆那样,用数组存储每一个人: 一开始给这些学生编好号,数组下标就是他们对应的编号。…

小熊猫Dev-C++:你的第一个C++开发环境终极指南

小熊猫Dev-C++:你的第一个C++开发环境终极指南

2026/7/27 7:55:47

小熊猫Dev-C:你的第一个C开发环境终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否正在寻找一款轻量级C开发环境?厌倦了复杂配置和臃肿的IDE?小熊猫Dev-C&…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

2026/7/27 0:05:04

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计 一、多模态对话的「首字节延迟」:上传与流式的协同鸿沟 多模态 AI 应用的前端体验,往往卡在"首字节延迟"上。用户上传一张图片,提一个问题,然后盯着空白对…

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

2026/7/27 0:05:04

文章目录第一章 大众普遍存在的认知误区:水晶香薰是芳香烃结晶产物1.1 聚丙烯酸钠凝胶水晶珠体系(市面占比90%家用水晶香薰)1.2 无机盐硬质结晶载体:泻盐与钾明矾香薰原石1.3 植物多糖与PVA整块果冻型水晶香膏1.4 唯一特例&#x…

优启通3.7修改版:深度优化的PE系统维护工具

优启通3.7修改版:深度优化的PE系统维护工具

2026/7/27 0:05:04

1. 项目概述今天要跟大家分享的是一个经过深度优化的PE工具——优启通3.7(2025修改版)。这个版本是在原版基础上进行了大量功能增强和兼容性改进的12月最新版本,特别适合系统维护人员和电脑爱好者使用。作为一个长期从事IT运维的老兵&#xf…