webpack5常用配置

2023-05-16

该常用配置使用的npm包:

"dependencies": {
    "autoprefixer": "^10.4.4",
    "clean-webpack-plugin": "^4.0.0",
    "css-loader": "^6.7.1",
    "html-webpack-plugin": "^5.5.0",
    "postcss-loader": "^6.2.1",
    "webpack": "^5.70.0",
    "webpack-cli": "^4.9.2"
  },
"devDependencies": {
    "@babel/core": "^7.17.7",
    "@babel/plugin-transform-runtime": "^7.17.0",
    "@babel/preset-env": "^7.16.11",
    "babel-loader": "^8.2.3",
    "compression-webpack-plugin": "^9.2.0",
    "cross-env": "^7.0.3",
    "file-loader": "^6.2.0",
    "mini-css-extract-plugin": "^2.6.0",
    "progress-bar-webpack-plugin": "^2.1.0",
    "style-loader": "^3.3.1",
    "webpack-bundle-analyzer": "^4.5.0",
    "webpack-dev-server": "^4.7.4"
  }

webpack.config.js 实例:

const path = require('path')
// 生成一个HTML5文件,在body中使用script标签引入你所有webpack生成的bundle
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 优化和压缩CSS
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 开启gzip压缩
const CompressionPlugin = require("compression-webpack-plugin");
// 增加编译进度条
const chalk = require('chalk')
const ProgressBarPlugin = require('progress-bar-webpack-plugin')
// 将bundle内容展示为一个便捷的、交互式、可缩放的树状图形式
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; 

console.log('process.env.NODE_ENV=', process.env.NODE_ENV) // 打印环境变量

const config = {
  // 配置入口
  entry: './src/index.js', 
  // 配置出口
  output: {
    filename: "[name].[contenthash:8].js", // 输出文件名
    path: path.join(__dirname, 'dist'), // 输出文件目录
    clean: true //每次构建清除dist包
  },
  // server配置
  devServer: {
    hot: true, //热更新
    open: true, //编译完自动打开浏览器
    compress: true, //开启gzip压缩
    port: 8080, //开启端口号
    //托管的静态资源文件
    //可通过数组的方式托管多个静态资源文件
    static: {
      directory: path.join(__dirname, "../public"),
    },
  },
  // loader都在module下的rules中配置
  // tip:use链式调用,都是从右向左解析,需注意调用loader的顺序。
  module: {
    rules: [
      // css转换规则
      {
        test: /\.css$/, //匹配所有的 css 文件
        use: [
          // 'style-loader',
          MiniCssExtractPlugin.loader,
          'css-loader',
          {
            loader: 'postcss-loader',
            options: { postcssOptions: { plugins: ['autoprefixer'] } }
          }
        ] // use: 对应的 Loader 名称
      },
      // webpack5内置了资源模块(asset module),代替了file-loader和url-loader
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset',
        generator: {
          filename: 'static/img/[name].[hash:7][ext]'
        }
      },
      // ES6,JSX转换规则
      {
        test: /(\.jsx|\.js)$/,
        use: ['babel-loader'],
        exclude: /node_modules/
      }
    ]
  },
  // 配置插件
  plugins: [
    new HtmlWebpackPlugin({
      // 静态html路径
      template: './public/index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: '[name].[hash:8].css'
    }),
    new ProgressBarPlugin({
      format: `:msg [:bar] ${chalk.green.bold(':percent')} (:elapsed s)`
    }),
    // new BundleAnalyzerPlugin(),
    new CompressionPlugin()
  ],
  // 配置别名
  resolve: {
    extensions: [".js", ".jsx", ".json", ".vue"], //省略文件后缀
    alias: { //配置别名
      "@": path.resolve(__dirname, "../src"),
    },
  },
  optimization: {
    // 拆分chunk
    splitChunks: {
      chunks: "all",
      name: "vendor",
      cacheGroups: {
        lodash: {
          name: "lodash",
          chunks: "async",
          test: /[\\/]node_modules[\\/]lodash[\\/]/,
          priority: 40,
        },
        "async-common": {
          chunks: "async",
          minChunks: 2,
          name: "async-commons",
          priority: 30,
        },
        commons: {
          name: "commons",
          chunks: "all",
          minChunks: 2,
          priority: 20,
        },
      },
    },
  },
}
module.exports = (env, argv) => {
  console.log('argv.mode=', argv.mode) // 打印 mode(模式) 值
  // 这里可以通过不同的模式修改 config 配置
  return config
}

根目录的.babelrc文件 实例:

{
  "presets": ["@babel/preset-env"],
  "plugins": ["@babel/plugin-transform-runtime"]
}

package.json 新增serve和build:

 "scripts": {
    "serve": "cross-env NODE_ENV=dev webpack serve --mode development",
    "build": "cross-env NODE_ENV=prod webpack --mode production",
  }

package.json 新增browserslist配置:

browserslist与scripts同级

"browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }

nginx配置gzip压缩

nginx配置gzip压缩,静态资源会被自动压缩。不需要所谓的插件,vite-plugin-compression compression-webpack-plugin

#Gzip module
    gzip  on;
    gzip_disable "MSIE [1-6].";
    gzip_min_length 1k;
    gzip_http_version 1.1;
    gzip_types text/css text/xml application/javascript;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack5常用配置 的相关文章

  • Eureka注册中心

    3 Eureka注册中心 假如我们的服务提供者user service部署了多个实例 xff0c 如图 xff1a 大家思考几个问题 xff1a order service在发起远程调用的时候 xff0c 该如何得知user service
  • 从docker 拉去指定版本的镜像

    从docker 拉去指定版本的镜像 1 上https hub docker com 网站 xff0c 查询 点击tags查看 2 拉取 docker pull images tags
  • SpringBoot整合mybatis-plus

    导入依赖 在项目pom文件导入依赖 在项目pom文件导入依赖 span class token tag span class token tag span class token punctuation lt span dependency
  • idea mybatisplus 插件使用

    在plugin中安装mybatisplus 插件 使用 配置数据库 生成代码 表新增字段 xff0c 重新生成实体类覆盖 因业务需求 xff0c 表中可能会时不时增加一些字段 xff0c 大多情况下实体类中不会添加表中没有的字段 xff0c
  • axios请求

    可传参数 span class token function axios span span class token punctuation span span class token punctuation span span class
  • kubesphere

    文章目录 KubeSphere简介安装多租户管理WordPressDevOps 作者声明 KubeSphere 默认的 dashboard 没啥用 xff0c 我们用 kubesphere 可以打通全部的 devops 链路 Kubesph
  • 粒子群算法 PSO

    粒子群算法 粒子群算法 PSO 在PSO中 每个优化问题的潜在解都是搜索空间的一只鸟 xff0c 被称为粒子 xff0c 所有的粒子都有一个由适应度函数决定的适值 xff0c 每个粒子还有一个速度决定它们 飞行 的方向和距离 xff0c 然
  • SEATAdocker-compose部署

    docker compose 文件 span class token key atrule version span span class token punctuation span span class token string 39
  • docker-compose 部署ELK

    目录结构 docker compose 文件 span class token key atrule version span span class token punctuation span span class token strin
  • sleuth-zipkin springcloud

    docker compose文件 span class token key atrule zipkin span span class token punctuation span span class token key atrule i
  • 登录session_id用法以及如何验证账号和密码

    登录的时候 xff0c session start session id 61 session id 把 session id储存在本地 xff08 app储存在app xff0c 电脑用cookie储存 xff09 xff0c 再次请求的
  • 正点原子MiniFly Firmware V1.5开源四轴代码硬件部分分析2:motor.c。

    一些参考 xff1a 电机控制基础 定时器基础知识与PWM输出原理 知乎 zhihu com include 34 sys h 34 include 34 delay h 34 include 34 motors h 34 include
  • 使用百度地图POI爬取需要的数据

    目标 xff1a 爬取阿克苏地区内的所有医院数据 一 百度地图开放平台注册 xff0c 获取到AK xff08 1 xff09 在百度地图开放平台完成注册 这个平台是百度地图为开发者提供接口用的 xff0c 有很多其他的功能 xff0c 这
  • RT-Thread 笔记整理

    1 AI xff1a 从前例中学习 xff1b 传统 xff1a 基于经验 2 IOT xff08 internet of things xff09 设备 xff08 传感器将原始数据上传 xff09 gt Gateway网关 gt clo
  • Realsense

    使用说明 xff1a 1 组装拍摄三脚架与滑动条轨 xff0c 将RealSense相机与手机一同装置在三脚架的滑动条轨上 2 连接RealSense到笔记本电脑 xff0c 不需任何配置即可直接适配设备 3 打开PC端软件 xff0c 调
  • 变频器基础:变频器工作原理与常用功能

    参考文献 1 向晓汉 宋昕 变频器与步进 伺服驱动技术完全精通教程 M 第1版 北京 化学工业出版社 2015 2 王永华 现代电气控制及PLC应用技术 M 第5版 北京 北京航空航天大学出版社 2018 3 王兆安 刘进军 电力电子技术
  • 线性系统的矫正方法——PID控制理论学习笔记

    主要谈及直流电机的速度PID控制 xff0c 在智能车中还有方向PID控制 xff08 舵机调整方向 xff09 参考文献 1 胡寿松 自动控制原理 M 第六版 北京 科学出版社 2015 2 陈伯时 电力拖动自动控制系统 运动控制系统 M
  • Linux驱动的软件架构(一):驱动的软件设计模式理念

    这个内容是我观看 Linux设备驱动开发详解 的学习笔记 xff0c 其实书里面是先讲了关于驱动的很多的基础知识 xff0c 然后再讲驱动的软件架构 但是我最近深深地沉迷于自顶向下的学习逻辑 xff0c 所以打算先对整个驱动有了框架之后 x
  • java.lang.NoClassDefFoundError: com/jspsmart/upload/SmartUploadException

    问题描述 我在使用Smartupload上传图片的时候 xff0c 代码没问题 xff0c 编译也没有报错 xff0c 但是启动服务器 xff0c 便出现了java lang NoClassDefFoundError com jspsmar
  • datetime-local数据类型和Date数据类型转化(前端到后端,后端到前端)

    前端的datetime local传递到后端为Date类型 前端的input输入框 span class token tag span class token tag span class token punctuation lt span

随机推荐

  • Ubuntu18.04中LXC安装配置以及简单使用

    LXC安装配置 安装LXC sudo apt install lxc y 安装完毕之后 xff0c 默认的文件路径为 etc lxc 查看LXC版本 sudo lxc version 然后创建Ubuntu的LXC容器 t 指定模板 xff0
  • STM32 串口详解

    目录 01 USART的特点 02 USART简介 2 1 数据传输模型 2 2 帧结构 2 3 波特率 03 STM32的USART 04 代码配置 01 USART的特点 USART是通用异步收发传输器 xff08 UniversalA
  • Ubuntu18.04安装配置FRR

    FRR 文章描述了如何在Ubuntu18 04的环境下安装配置frr 0 更新安装源 vi etc apt sources list 更改文件内容 deb http mirrors aliyun com ubuntu bionic main
  • Ubuntu中安装配置JDK1.8

    JDK1 8安装配置 下载JDK 点击下载jdk 解压 将下载的压缩包解压到 opt目录下 span class token function tar span zxvf 下载的jdk压缩包名字 C opt 设置软链接 切换到 opt目录下
  • 使用Systemback制作Ubuntu20.04自定义系统镜像和系统备份

    为了方便我们自定义系统的镜像文件和系统下载的软件 xff0c 减轻再次部署的麻烦 xff0c 我们会制作镜像文件 本文就是利用Systemback来制作Ubuntu20 04自定义系统镜像和系统备份 查看网上的Systemback安装教程很
  • Key exchange was not finished, connection is closed.解决办法

    错误 利用java连接Linux服务器中碰到错误 xff1a Key exchange was not finished connection is closed xff0c 导致服务器的连接失败 xff0c 报错如下 原因 是ssh中的k
  • JAVA数据结构之顺序表、单向链表及双向链表的设计和API实现

    一 顺序表 顺序表在内存中是数组的形式存储 类名SequenceList构造方法SequenceList int capacity xff1a 创建容量为capacity的SequenceList对象成员方法1 public void cl
  • 单向链表快慢指针实际应用问题

    快慢指针 所谓快慢指针 xff1a 就是利用两个指针移动速度的不同来实现需求 xff0c 一般设置两个指针 xff0c 慢指针每次移动一格 xff0c 快指针每次移动两格 下面分享利用快慢指针解决中间值 链表环路以及环路入口的问题 中间值问
  • Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 解决方法

    问题描述 Caused by java sql SQLSyntaxErrorException You have an error in your SQL syntax xff1b check the manual that corresp
  • 数组和JSON之间的格式转换

    数组和JSON之间的格式转换 主要代码 xff1a span class token keyword const span a span class token operator 61 span span class token const
  • Linux vncpasswd and passwd

    1 vncpasswd 功能 xff1a 使用vncpasswd命令可以创建或更改一个VNC的登录密码 xff0c 这将同时在用户的主目录下创建一个隐藏的目录 vnc xff0c 该目录内有一个文件passwd保存着VNC登录密码 语法 v
  • 修改运行中的docker容器的端口映射(简单、高效)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言查看已经存在容器id关闭docker服务 xff0c 修改配置文件结束 xff0c 启动容器 前言 在docker run创
  • 人脸识别系列(十六):AMSoftmax

    论文链接 xff1a Additive Margin Softmax for Face Verification 2019 1 24 xff1a 注 xff1a 腾讯AI Lab的 CosFace Large Margin Cosine L
  • C语言:strtok()的用法。

    char strtok char str const char sep 1 sep参数是个字符串 xff0c 定义了用作分隔符的字符集合 xff1b 2 第一个参数指定一个字符串 xff0c 它包含了0个或者多个由sep字符串中一个或者多个
  • 日积月累

    目录 PYTHONUBUNTUTRACKINGNEURAL NETWORKMACHINE LEARNING PYTHON 有路径的地方要注意区别 和 ubuntu使用 分割文件夹 xff1b 对于别人的代码 xff0c 首先仔细阅读read
  • 19.RFID复习

    题型 填空题30分 xff08 一空一分 xff09 简答题30分 xff08 三道题 xff09 综合题40分 xff08 两道题 xff09 重点章节第一章 xff0c 第二章 xff08 见整理的练习题 xff09 xff0c 第四章
  • [Linux驱动]-----NAND FLASH

    一 NAND原理及硬件操作 C xff1a fopen xff0c fread xff0c fwrite APP open read write 1 txt 文件读写 文件系统 xff1a vfat ext2 ext3 yaffs xff0
  • sklearn中train_test_split里,参数stratify含义解析

    直接上代码 xff1a span class token keyword from span sklearn span class token punctuation span model selection span class toke
  • CentOS 7/8 预装的新型防火墙firewalld配置详解,

    前言 本文将会详细介绍CentOS 7 firewalld的来由 功能 常用命令 常用的案例及使用方法 希望能帮助读者全面了解firewalld xff0c 并能正确配置和使用它 centos7 firewalld firewalld与ip
  • webpack5常用配置

    该常用配置使用的npm包 xff1a span class token string property property 34 dependencies 34 span span class token operator span span