首页 > 其他分享 >深度解析webpack5以及打包实践攻略,看完这篇带你玩转高级自定义打包

深度解析webpack5以及打包实践攻略,看完这篇带你玩转高级自定义打包

时间:2024-03-23 10:00:31浏览次数:29  
标签:这篇带 自定义 loader Webpack 构建 模块 优化 打包

1.webpack5对比webpack4做了哪些优化

Webpack 5 对比Webpack 4 存在一些重要的优化。Webpack 5 在性能、构建速度、Tree Shaking 等方面都有所改进:

  1. 性能改进

    • Webpack 5 在构建速度和性能方面有所提升。这主要是通过改进缓存策略、优化构建算法以及增强的持久化缓存等方式实现的。这意味着更快的构建时间和更高的整体性能。
  2. 支持Tree Shaking

    • 在 Webpack 5 中,Tree Shaking(树摇)机制得到了改进,这意味着它更有效地识别和删除未使用的代码,以减小最终构建的文件大小。
  3. 对ES6模块和JSON模块的优化

    • Webpack 5 对于 ES6 模块和 JSON 模块的处理更加智能和优化,从而提高了构建速度。
  4. 默认持久化缓存

    • Webpack 5 默认启用了持久化缓存,这意味着构建过程中的中间结果会被缓存,以便在后续的构建中重复使用,进而加快构建速度。
  5. 改进的 Tree Shaking 算法

    • Webpack 5 中对 Tree Shaking 算法进行了改进,使其更加精确和高效,从而能够更好地识别和删除未使用的代码。
  6. 内置的模块类型优化

    • Webpack 5 提供了一种新的模块类型——module.type,可以通过配置文件进行设置,以便更好地与不同的目标环境进行兼容和优化。

2.webpack5的核心原理

Webpack 5 的核心原理涉及了模块化、依赖分析、打包优化等多个方面。下面是Webpack 5 的核心原理的概述:

  1. 模块化

    • Webpack 5 将项目中的各个文件视为模块,这些模块可以是 JavaScript 文件、CSS 文件、图片、字体等各种资源。它使用模块化的思想来管理这些文件,使得项目的各个部分可以相互依赖、独立开发和测试。
  2. 依赖分析

    • 在构建过程中,Webpack 5 会对项目中的模块进行依赖分析,即分析模块之间的依赖关系。通过识别模块之间的 import、require 等语句,Webpack 能够确定模块之间的依赖关系,从而构建出一个依赖关系图,这也是 Webpack 5 能够正确地打包项目中所有依赖的基础。
  3. 打包优化

    • Webpack 5 会根据依赖关系图进行打包优化。这包括但不限于:
      • Tree Shaking:删除项目中未使用的代码,以减小打包后的文件大小。
      • 代码分割:将项目代码拆分为多个块,按需加载,从而提高页面加载速度。
      • 持久化缓存:通过缓存构建过程中的中间结果,减少重复工作,提高构建速度。
      • 多线程构建:利用多线程或者多进程来并行处理模块,加快构建速度。
      • 模块类型优化:根据目标环境,优化模块类型,提高兼容性和执行效率。
      • 自动刷新:在开发过程中,Webpack 5 会监视文件的变化,并实时更新构建结果,提供热更新功能。
  4. 插件系统

    • Webpack 5 提供了丰富的插件系统,允许开发者通过插件来扩展和定制 Webpack 的功能。通过插件系统,开发者可以在打包过程的各个阶段介入,实现自定义的功能,比如代码压缩、资源优化、文件拷贝等。
  5. 编译器和解析器

    • Webpack 5 内部包含了编译器和解析器,用于将项目中的源代码转换为可执行的 JavaScript 代码。编译器负责将各种类型的模块转换为标准的 JavaScript 代码,解析器负责解析 JavaScript 代码中的语法,构建 AST(抽象语法树),以便后续的依赖分析和打包优化。

    Webpack 5 的核心原理包括模块化、依赖分析、打包优化、插件系统以及编译器和解析器等多个方面,它通过这些机制来实现对项目代码的打包和优化,从而提供了高效、灵活的前端构建解决方案。

3.webpack5实践-常用API

在webpack配置文件webpack.config.js中,下面介绍一些必需要掌握的api:

1. entry(入口)

Webpack 5 的入口配置指定了打包的起始点。可以是一个单一的入口或多个入口。下面举例单一入口代码:

module.exports = {
   
  entry: './src/index.js'
};

搞懂了后,后面我再继续探索多入口,由浅入深,举一反三,加油!!!

2. output(输出)

output 配置项指定了打包后的文件输出的位置和文件名等信息。

module.exports = {
   
  output: {
   
    filename: 'bundle.js', //打包后生成js文件名
    path: path.resolve(__dirname, 'dist')。 //js文件在dist目录里头
  }
};

3. devServer(开发服务器)

devServer 配置项用于配置开发服务器,提供了许多有用的功能,如自动刷新、热模块替换等。

module.exports = {
   
  devServer: {
   
    contentBase: './dist', //项目打包后生成文件的目录名
    port: 8080, //本地运行的端口号
    hot: true。//是否开启热更新
  }
};

4. mode(模式)

mode 配置项指定了当前构建的环境,可选值有 ‘development’:开发模式、‘production’ :生产环境和 ‘none’ 。

module.exports = {
   
  mode: 'development' //
};

5. module(模块)

module 配置项用于配置不同类型模块的处理规则,例如配置 loader。

module.exports = {
   
  module: {
   
    rules: [
        {
   
          //.js文件loader
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
   
            loader: 'babel-loader',
            options: {
   
              cacheDirectory: true,
              cacheCompression: false
            }
          }
        },
        {
   
          //.vue文件loader
          test: /\.vue$/,
          use: 'vue-loader'
        },
        {
   
          //.css文件loader
          test: /\.css$/,
          use: [isProduction ? MiniCssExtractPlugin.loader : 'vue-style-loader', 'css-loader'

标签:这篇带,自定义,loader,Webpack,构建,模块,优化,打包
From: https://blog.csdn.net/weixin_47622005/article/details/136807340

相关文章

  • Vue开发日志:自定义组件:通用开发流程
    自定义组件:通用开发流程通用流程一组概念:key,value,labelProps:required和default同时存在的必要性让我们简单梳理一下通用流程在Vue.js中开发自定义组件的通用流程如下:定义组件模板:创建一个.vue文件,里面包含模板、样式和脚本部分。例如:<!--MyCustomCompone......
  • python 教你如何创建一个自定义库 colorlib.py
    目录Colorlib生成代码模块代码导入测试测试一测试二应用测试颜色列表colorList随机颜色元组randcolorTuples随机颜色字串randcolorStringsColor类测试测试一测试二题外话Colorlib有没有碰到过这样的场景:写代码时想要用上丰富的色彩,但苦思冥想搜肠刮肚只记......
  • 自定义类型--结构体、联合体、枚举类型
    **Ladiesandgentlemen**,今天,我们将来进行对自定义类型的学习!目录1.结构的特殊声明2.结构体内存对齐2.1对齐规则2.1.12.1.22.1.32.1.42.2为什么存在内存对齐?1.平台原因(移植原因):2.性能原因:2.3修改默认对齐数3.结构体传参4.结构体实现位段4.1什么......
  • 2020-3-7-webpack打包工具
    概述、快速使用、配置文件、webpack-dev-server、babel使用概述为优化页面发送多次的二次请求导致加载速度变慢和处理错综复杂的文件依赖关系,则需要将项目中涉及的多个文件进行合并并重新构建。wepack是一个基于node.js项目构建工具,其构建方式是基于项目构建。安装npmiwebp......
  • uni-app/小程序自定义导航栏下拉刷新loading图标看不到问题解决
    实际效果图 我们在page.json中开启了自定义导航栏属性和下拉刷新属性后//开启下拉刷新"enablePullDownRefresh":true//自定义导航栏"navigationStyle":"custom"此时,页面中的下拉刷新三个小圆点会被我们的导航栏遮盖住,导致用户下拉刷新看不到loading效果,如下图:......
  • ROS2自定义msg
    在ROS2中,您可以通过编写自己的自定义消息来扩展消息类型。以下是如何创建自定义消息的一般步骤:1.**创建消息文件夹**:在功能包下创建msg的文件夹2.**编写消息文件**:在`msg`文件夹内创建一个`xxx.msg`文件,命名为所需的消息类型,例如`MyCustomMsg.msg`。3.**定义消息结构**:在消......
  • 4年前的React老项目打包报错解决问题处理过程
    处理公司一个4年前React应用时,发现打包编译时会出现如题错误:Failedtominifythebundle.Error:index.71782de2.jsfromUglify]s  查看打包编译后源码错误位置: 经过bing搜索引擎查找类似解决方式: https://github.com/sorrycc/blog/issues/68 1、npm安装 https://g......
  • RK356x Linux解包update.img、打包update.img和win环境下烧写固件
    1.解包update.imgstep1将afptool、rkImageMaker、unpack.sh拷贝在~/work/test下topeet@ubuntu:~/work/test$lsafptooloutputrkImageMakerunpack.shupdate.imgstep2执行./unpack.sh,后会生成output文件夹topeet@ubuntu:~/work/test$./unpack.sh......
  • ThinkPHP自定义指令
    官网文档https://www.kancloud.cn/manual/thinkphp6_0/1037651创建命令类文件运行指令创建一个自定义命令类文件phpthinkmake:commandHellohello生成内容如下<?phpnamespaceapp\command;usethink\console\Command;usethink\console\Input;usethink\console\in......
  • Python实战:打包与分发setup.py与pip
    一、引言在Python开发中,打包和分发项目是一个重要的环节。为了让其他开发者能够使用我们的项目,我们需要将项目打包成一个可安装的Python包。此外,为了方便地管理和安装Python包,Python社区开发了一个强大的包管理工具——pip。本文将详细介绍Python打包与分发的过程,包括使用s......