在 Webpack 中配置多入口应用并实现公共依赖的提取

1. 配置多入口点

首先,在 webpack.config.js 文件中定义多个入口点。你可以通过对象形式来指定多个入口点,每个入口点对应一个输出文件。

const path = require('path');module.exports = {entry: {app1: './src/app1/index.js',app2: './src/app2/index.js'},output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')},// 其他配置...
};

在这个例子中,app1 和 app2 分别对应两个不同的入口文件,Webpack 会分别为它们生成一个输出文件,文件名分别为 app1.bundle.js 和 app2.bundle.js。

2. 使用 optimization.splitChunks 提取公共依赖

为了提取公共依赖,可以在 optimization 配置项中使用 splitChunks 选项。splitChunks 可以根据一定的策略将公共模块提取到单独的文件中。

const path = require('path');module.exports = {entry: {app1: './src/app1/index.js',app2: './src/app2/index.js'},output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')},optimization: {splitChunks: {chunks: 'all', // 对所有类型的 chunk 进行分割minSize: 10000, // 最小的 chunk 大小,默认是 20000 字节maxSize: 0, // 最大的 chunk 大小,默认是 0,表示没有限制minChunks: 1, // 模块必须被共享的次数,默认是 1maxAsyncRequests: 10, // 按需加载时的最大并行请求数,默认是 10maxInitialRequests: 5, // 入口点的最大并行请求数,默认是 5automaticNameDelimiter: '~', // 自动生成的 chunk 名称分隔符,默认是 ~name: true, // 使用默认的命名规则cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/, // 匹配 node_modules 中的模块priority: -10, // 设置优先级,负数表示较低的优先级filename: 'vendors~[name].js' // 自定义公共 chunk 的文件名},default: {minChunks: 2, // 至少被两个 chunk 共享priority: -20, // 设置优先级reuseExistingChunk: true, // 如果当前 chunk 已经包含了一个模块,则不再生成新的 chunkfilename: 'common~[name].js' // 自定义公共 chunk 的文件名}}}},// 其他配置...
};

3. 解释 cacheGroups 配置

vendors:这是一个缓存组,用于匹配来自 node_modules 的模块,并将它们提取到一个名为 vendors~[name].js 的文件中。
default:这是另一个缓存组,用于匹配至少被两个 chunk 共享的模块,并将它们提取到一个名为 common~[name].js 的文件中。

4. 动态导入和代码分割

如果你的应用中使用了动态导入(import()),Webpack 会自动进行代码分割,生成按需加载的 chunk。这对于提高应用的加载性能非常有帮助。

// 动态导入示例
import('./module').then((module) => {// 使用 module
});

5. 测试和优化

配置完成后,运行 webpack 命令进行构建,检查生成的文件是否符合预期。可以通过查看 dist 目录下的文件来验证公共依赖是否被正确提取。

6. 生产环境优化

在生产环境中,建议使用 mode: ‘production’ 模式来启用更多优化,如压缩、树摇等。

module.exports = {mode: 'production',// 其他配置...
};

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

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

相关文章

Ubuntu22.04安装GNSS数据处理软件GAMIT/GLOBK

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~ 手把手带您安装gamit/globk软件~ 🌿前言 受朋友之托,出一期Ubuntu22.04安装GNSS数据处理软件——gamit软件…

Java使用Map数据结构配合函数式接口存储方法引用

Java使用Map数据结构配合函数式接口存储方法引用 背景 需求中存在这样一直情况 一个国家下面有很多的州 每个州对应的计算日期方法是不同的 这个时候 就面临 可能会有很多if else 为了后期维护尽量还是不想采用这个方式,那么就可以使用策略模式 但是 使用策略带来的…

【论文笔记】Are Large Kernels Better Teacheres than Transformers for ConvNets

Abstract 本文提出蒸馏中小核ConvNet做学生时,与Transformer相比,大核ConvNet因其高效的卷积操作和紧凑的权重共享,使得其做教师效果更好,更适合资源受限的应用。 用蒸馏从Transformers蒸到小核ConvNet的效果并不好,原…

MySQL篇(存储过程 触发器 存储函数)(持续更新迭代)

目录 一、存储过程 1. 简介 2. 特点 3. 语法 3.1. 创建 3.2. 调用 3.3. 查看 3.4. 删除 4. 示例 二、变量 1. 简介 2. 系统变量 2.1. 查看系统变量 2.2. 设置系统变量 2.3. 演示示例 3. 用户定义变量 3.1. 赋值 方式一 方式二 3.2. 使用 3.3. 演示示例 4.…

富文本编辑器wangEdittor使用入门

一、wangEdittor介绍 富文本编辑器为开源产品wangEditor。wangEditor是一款轻量级Web富文本编辑器,配置方便,使用简单。读者可在其官网和GitHub仓库进行更多了解。主要有以下功能: 1)图文混排 wangEditor可以编辑的内容比较丰富…

Rust - 字符串:str 与 String

在其他语言中,字符串通常都会比较简单,例如 “hello, world” 就是字符串章节的几乎全部内容了。 但是Rust中的字符串与其他语言有所不同,若带着其他语言的习惯来学习Rust字符串,将会波折不断。 所以最好先忘记脑中已有的关于字…

华为---代理ARP简介及示例配置

目录 1. 概念 2. 前提条件 3. 使用环境 4. 工作过程 5. 优点 6. 缺点 7. 示例配置 7.1 示例场景 7.2基本配置 7.3 配置端口隔离 7.4 开启代理ARP 7.4.1 VLAN内代理ARP 7.4.2 VLAN间代理ARP 7.4.3路由式ARP代理 1. 概念 代理ARP(Proxy ARP)&…

C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

matlab恢复默认窗口布局

1.点击主页,选择布局 2.选择默认,即可恢复到默认的窗口布局

LIN总线CAPL函数—— 设置LIN报文字节间隔长度(linSetInterByteSpace)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

利士策分享,如何培养良好的工作习惯?

利士策分享,如何培养良好的工作习惯? 在这个快节奏、高压力的职场环境中,培养良好的工作习惯不仅关乎个人职业发展的顺畅度, 更是提升工作效率、保持身心健康的关键。 以下是一些实用的建议,帮助你在日常工作中逐步构…

大语言模型量化方法GPTQ、GGUF、AWQ详细原理

大语言模型量化的目的是减少模型的计算资源需求和存储占用,同时尽量保持模型的性能。以下是几种常见的量化方法的原理; 1. GPTQ (Gradient-based Post-training Quantization) GPTQ 是一种基于梯度的后训练量化方法,主要目的是在减少浮点计…

macOS 系统中python的安装步骤

访问Python官网: 打开浏览器,访问Python的官方网站(https://www.python.org/)。 下载Python安装包: 在官网首页找到“Downloads”链接,点击进入下载页面。选择适用于macOS的安装包。在撰写本文时&#xff…

智慧水利采砂船在线监控平台:构建高效、智能的河道采砂监管体系

随着科技的不断发展,水利行业的智慧化转型也日益受到重视。智慧水利采砂船在线监控平台便是这一转型的重要成果之一。该平台主要服务于水政执法人员,针对取得河道采砂许可证的采砂公司及采砂船,实施在线自动监控,旨在提高监管效率…

Ubuntu USB设置别名

在 Ubuntu 中,可以通过创建 udev 规则为 USB 设备设置别名。这样你可以通过自定义的别名访问设备,而不是使用随机分配的设备节点(例如 /dev/ttyUSB0)。 1. 确认设备信息 首先,你需要找到设备的相关信息&#xff08…

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…

iptables限制网速

1、使用hashlimit来限速 #从eth0网卡进入INPUT链数据,使用模块hashlimit 限制网速为100kb/s或2mb/s,超过限制的数据包会被DROP。OUTPUT链同理,mode为srcip,有4个mode选项: srcip(默认匹配每个源地址IP,配置指定源地址…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module named numpy问题解…

保障电气安全的电气火灾监控系统主要组成有哪些?

电气火灾是什么? 电气火灾一般是指由于电气线路、用电设备、器具以及供配电设备出现故障性释放的热能:如高温、电弧、电火花以及非故障性释放的能量;如电热器具的炽热表面,在具备燃烧条件下引燃本体或其他可燃物而造成的火灾&…

递归基础训练-路径总和

路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 我们可以把之前的…