umd格式

umd格式是啥?

umd格式是一种通用模块,他同时支持AMD、CJS、ESM模块和全局变量的方式

umd格式打包后的基本代码结构如下:

(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMDdefine(['dependency'], factory);} else if (typeof exports === 'object') {// CommonJSmodule.exports = factory(require('dependency'));} else {// 浏览器全局变量(root 即 window)root.returnExports = factory(root.dependency);}
}(this, function (dependency) {// 模块的实际代码部分return {};
}));

实际打包后可以看到类似这样的代码:

function (e, t) { "object" === typeof exports && "object" === typeof module ? module.exports = t() : "function" === typeof define && define.amd ? define([], t) : "object" === typeof exports ? exports["sub-app-main"] = t() : e["sub-app-main"] = t() }


回顾各个模块的对比

1. CommonJS

  • Node.js 采用的规范
  • 使用 `require` 和 `module.exports`
  • 同步加载
  • 主要用于服务器端

代码:

// 导出
module.exports = { ... }
// 导入
const module = require('./module')

2、ESM

基本

  • ES6 官方规范
  • 静态导入导出
  • 支持树摇(tree-shaking)
// 导出
export default { ... }
// 导入
import module from './module'

esm的静态是啥?

1、在顶层使用,不能在函数和if等语句中使用。

2、在代码执行之前,编译阶段就能确定模块依赖关系,从而树摇。

3、可以用es6+的import函数来动态引入,这个函数返回promise。

3、AMD(老)

  • 异步加载模块
  • RequireJS 的规范
  • 主要用于浏览器端
define(['dependency'], function(dependency) {return { ... }
});

UMD的用途

1、开发需要跨平台兼容的库
2、不确认使用环境的第三方包

3、微前端框架,比如qiankun

如何配置打包为umd格式?

配置

以webpack为例,主要设置output.library.type  为 umd 即可。

简易代码:

module.exports = {//其他配置// 输出配置output: {path: path.resolve(__dirname, 'dist'),filename: 'my-library.js',library: {name: 'MyLibrary', // 库的全局变量名type: 'umd',       // 输出的模块格式},}
}

output.library.type各个值的意义

官网:

Output | webpack 中文文档 | webpack中文文档 | webpack中文网webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换、打包或包裹任何资源。icon-default.png?t=O83Ahttps://www.webpackjs.com/configuration/output/#outputlibrarytype

其他人博客:

https://juejin.cn/post/7140619769853509640

1、一般的前端项目进行配置,打包之后就是匿名函数自执行,不会暴露什么全局变量啥的,如果这个项目要供其他项目使用,就进行设置output.library.type。

2、开发第三方库时,可以设置为umd,这样就能支持多种环境了。

3、设置var或window,这样会将模块导出内容挂到window上,代码如下:

window['MyLib'] = (() => {// webpack 运行时代码return {// 你的模块导出内容someMethod: function() { ... }};
})();//使用:
// 可以直接通过 window 访问
window.MyLib.someMethod();
// 或者直接使用
MyLib.someMethod();

END
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Rust权威指南》学习笔记(二)

枚举enum 1.枚举的定义和使用如下图所示: 定义时还可以给枚举的成员指定数据类型,例如:enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下,使用::进行分隔。 2.一个特殊的枚举Option&#xff0…

CoppeliaSim和Python进行无人机联合仿真

首先建立起CoppeliaSim和Python的连接,其次在Python中生成轨迹,CoppeliaSim仿真环境中的无人机进行跟踪,并绘制出轨迹曲线,有每一步详细的教学。 最终运行效果: 一、 建立起CoppeliaSim和Python的远程连接 1. 拷贝API函数和库文件 拷贝库函数文件 sim.py、simConst.p…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」:从基础到进阶的实战指南 数据结构是程序设计中的核心部分,用于组织和管理数据。Java 提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

windows11安装minikube

主要是按照官网步骤安装,由于是英文,又不是常规安装包的形式,稍微难理解一点,特此记录。 下文仅是对部分步骤做了说明,需要以官网为主,本文为辅。 一、访问minikube官网 https://minikube.sigs.k8s.io/d…

LLM大模型RAG内容安全合规检查

1.了解内容安全合规涉及的范围 我们先回顾一下智能答疑机器人的问答流程。问答流程主要包括用户、智能答疑机器人、知识库、大语言模型这四个主体。 涉及内容安全的关键阶段主要有: 输入阶段:用户发起提问。 输出阶段:机器人返回回答。 知识…

OpenCV计算机视觉 05 图像边缘检测(Sobel算子、Scharr算子、Laplacian算子、Canny边缘检测)

图像边缘检测 边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域。 yuancv2.imread(yuan.png) cv2.imshow(yuan,yuan) cv2.waitKey(0) yuan_xcv2.Sob…

【C++】P2550 [AHOI2001] 彩票摇奖

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:输入输出样例: 💯题解思路1. 问题解析 💯我的实现实现逻辑问题分析 💯老…

【调试记录】在CARLA中插入可以播放视频的组件

〇、问题描述 做实验验证的时候,需要在CARLA仿真环境中添加一个可以播放视频的功能,查了很多现有的实验,基本都是插入图像,而对于插入视频,实现的方法就很麻烦了。一开始考虑的是直接用射影变换进行叠加,计…

SQL—Group_Concat函数用法详解

SQL—Group_Concat函数用法详解 在LC遇见的一道很有趣的SQL题,有用到这个函数,就借这道题抛砖引玉,在此讲解一下group_concat函数的用法。🤣 GROUP_CONCAT([DISTINCT] expression [ORDER BY expression] [SEPARATOR separator])…

深入解析 Linux 设备树中的引脚控制(pinctrl)二

在嵌入式开发中,设备树(Device Tree)是描述硬件设备和系统拓扑的重要结构。而在 Linux 内核中,引脚控制(pinctrl)是一个关键的硬件资源管理部分,负责管理和配置设备的引脚(GPIO、I2C、SPI 等接口)功能和状态。设备树通过描述这些引脚的特性,指导 Linux 内核如何正确地…

MySQL(六)MySQL 案例

1. MySQL 案例 1.1. 设计数据库 1、首先根据相关业务需求(主要参考输出输入条件)规划出表的基本结构   2、根据业务规则进行状态字段设计   3、预估相关表的数据量进行容量规划   4、确定主键   5、根据对相关处理语句的分析对数据结构进行相应的变更。   设计表的时…

后台管理系统动态面包屑Breadcrumb组件的实现

在后管理系统开发中,面包屑导航是一个非常常见的功能,通常是根据当前的 url 自动生成面包屑导航菜单,当跳转路由发生变化时,面包屑导航都会随之发生变化,即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…

4.1.2 栈和队列(一)

文章目录 栈的定义栈的基本运算栈的存储结构栈的应用表达式求值 栈和队列的逻辑结构与线性表相同,但是其运算受到限制,统称为运算受限的线性表。 栈, 先进后出 队列,先进先出 栈的定义 栈顶,唯一能操作端 栈底&#xf…

基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真,仿真输出燃料电池中氢氧元素含量变化以及生成的H2O变化情况。 2.系统仿真结果 3.核心程序与模型 版本…

k620老显卡,装cuda.等。

CUDA安装教程(超详细)-CSDN博客 1.下载支持12.0以上的驱动 NVIDIA RTX Driver Release 550 R550 U12 (553.50) | Windows 11 解压。安装。一路下一步。查看结果 2.下载 cuda CUDA Toolkit Archive | NVIDIA Developer 安装cuda时,第一次…

【数学建模笔记】评价模型-基于熵权法的TOPSIS模型

视频课地址:https://www.bilibili.com/video/BV1eRyVYUEhg 本系列文章和课程一样,只使用Python实现,好久没玩数学建模了 国赛中不能再用TOPSIS,可以做辅助算法。 1. 算法原理 熵权TOPSIS方法是一种结合熵权法和TOPSIS的决策分析…

当今世界如何减少暴戾之气和矛盾纷争

《消暴戾、减纷争》(一) 暴戾之气常见于陌生人之间、纷争矛盾常见于与陌生人、同事、朋友、家人之间,总之就是一切人际关系、交际 常见案例:路怒症、住户与外卖小哥的纷争,同事、朋友、家人之间的矛盾 小吵还好&#…

【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 沸羊羊舔狗自查表)

【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 & 沸羊羊舔狗自查表) 文章目录 1、情感关系中的平等意识2、如何经营一段长期稳定的关系(避免左倾 | 敬畏与担当)3、沸羊羊/舔狗自查表(避免右…

让css设置的更具有合理性

目录 一、合理性设置宽高 二、避免重叠情况,不要只设置最大宽 三、优先使用弹性布局特性 四、单词、数字换行处理 五、其他编码建议 平常写css时,除了遵循一些 顺序、简化、命名上的规范,让css具有合理性也是重要的一环。 最近的需求场…