当前位置: 首页 > article >正文

在 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, // 模块必须被共享的次数,默认是 1
      maxAsyncRequests: 10, // 按需加载时的最大并行请求数,默认是 10
      maxInitialRequests: 5, // 入口点的最大并行请求数,默认是 5
      automaticNameDelimiter: '~', // 自动生成的 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 已经包含了一个模块,则不再生成新的 chunk
          filename: '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.kler.cn/a/317666.html

相关文章:

  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • MySQL系列之如何在Linux只安装客户端
  • OpenGL ES 共享上下文实现多线程渲染
  • Unity学习笔记(4):人物和基本组件
  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • LeetCode【0031】下一个排列
  • 安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改
  • 网络安全与国家安全的关系
  • 计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
  • SpringBoot | Maven快速上手
  • ER论文阅读-Decoupled Multimodal Distilling for Emotion Recognition
  • git reflog 和 git log 的详解和区别
  • python 实现bailey borwein plouffe算法
  • AutoX.js向后端传输二进制数据
  • HTML常见语法设计
  • RTSP学习
  • 气膜建筑的维护与维修:延长使用寿命的关键—轻空间
  • 数据科学的秘密武器:defaultdict——Python字典的自动化填充神器,让数据结构更灵活
  • golang学习笔记10-循环结构
  • 黎巴嫩通信设备连环爆炸之谜——网络+供应链攻击
  • 单元测试和unittest框架(超详细总结)
  • ubuntu配置libtorch CPU版本
  • 基本定时器的预分频器和技术周期的计算
  • STM32与51单片机的区别:是否应该直接学习STM32?
  • 推荐一款开源的Redis桌面客户端
  • uniapp打字效果流式输出