Webpack5

2023-12-17

一、Webpack基础

打包工具:将框架(React、Vue),ES6,Less/Sass等语法编译成浏览器能识别的JS、CSS;压缩代码、兼容性处理、提升代码性能等。

一、entry(入口)

指示Webpack 从哪个文件开始打包

二、output(输出)

指示Webpack打包完的文件输出到哪里去,如何命名等

三、loader(加载器)

webpack本身只能处理JS、JSON等资源,其他资源需要借助loader,webpack才能解析

四、plugins(插件)

扩展webpack的功能

五、mode(模式)

  • 开发模式:development
  1. 编译代码,使浏览器能识别运行
  2. 代码质量检查,梳理代码规范
  • 生产模式:production
  1. 优化代码运行性能
  2. 优化代码打包速度

//webpack.config.js
const path = require("path");// nodejs核心模块,专门用来处理路径问题
const ESLintWebpackPlugin = require('eslint-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizePlugin = require('css-minimize-plugin');

module.exports = {
    //入口
    entry:"./src/main.js",//相对路径
    //输出
    output:{
        //所有文件的输出路径
        //_dirname nodejs的变量,代表当前文件的文件夹目录
        path:path.resolve(_dirname,"dist"),//绝对路径
        //入口文件打包输出文件名
        filename:"static/js/main.js",
        // 自动清空上次打包内容 原理:在打包前,将path整个目录内容清空,再进行打包
        clean: true,
    },
    //加载器
    module:{
        rules:[
        //loader的配置
            // css配置
            {
                test:/\.css$/, //只检测.css文件
                use:[
                    //执行顺序:从右都左(从下到上)
                    //"style-loader",// 将js中的css通过创建style标签添加html文件中生效
                    MiniCssExtractPlugin.loader,// 提取css成单独文件
                    "css-loader",// 将css资源编译成commonjs的模块到js中
                    {
                        loader:"postcss-loader",
                        options:[
                            postcssOptions:{
                                plugins:[
                                    "postcss-preset-env",//能解决大多数样式兼容性问题
                                ],
                            },
                        ],
                    },
                ]
            },
            // less配置
            {
                test:/\.less$/, 
                // loader:'xxx', //只能使用1个loader
                use:[// 使用多个loader
                    //"style-loader",// 将js中的css通过创建style标签添加html文件中生效
                    MiniCssExtractPlugin.loader,// 提取css成单独文件
                    "css-loader",// 将css资源编译成commonjs的模块到js中
                    {
                        loader:"postcss-loader",
                        options:[
                            postcssOptions:{
                                plugins:[
                                    "postcss-preset-env",//能解决大多数样式兼容性问题
                                ],
                            },
                        ],
                    },
                    "less-loader", // 将less编译成css文件
                ]
            },
            // Sass/Scss配置
            {
                test:/\.s[ac]ss$/, 
                use:[
                    //"style-loader",// 将js中的css通过创建style标签添加html文件中生效
                    MiniCssExtractPlugin.loader,// 提取css成单独文件
                    "css-loader",// 将css资源编译成commonjs的模块到js中
                    {
                        loader:"postcss-loader",
                        options:[
                            postcssOptions:{
                                plugins:[
                                    "postcss-preset-env",//能解决大多数样式兼容性问题
                                ],
                            },
                        ],
                    },
                    "sass-loader", // 将sass编译成css文件
                ]
            },
            // 图片配置
            {
                test:/\.(png|jpe?g|gif|webp|svg)$/,
                type:"asset",
                parser:{
                    dataUrlCondition:{
                        //小于10kb的图片转base64,优点:减少请求数量 缺点:体积会更大
                        maxSize:10*1024, // 10kb
                    },
                },
                generator:{
                    //输出图片名称  [hash:10] hash值取前10位
                    filename: "static/images/[hash:10][ext][query]",
                },
            },
            // 字体图表及其他资源配置
            {
                test:/\.(ttf|woff2?|map3|map4|avi)$/,
                type:"asset/resourse",
                generator:{
                    //输出名称
                    filename: "static/desia/[hash:10][ext][query]",
                },
            },
            // babel配置
            {
                test:/\.js$/,
                exclude:/node_modules/, // 排除node_moudles中的js文件
                loader: "babel-loader"
                //options:{
                //    //智能预设
                //    presets: ["@babel/preset-env"],
                //},
            },
        ]
    },
    //插件
    plugins:[
        //ESLint的配置
        new ESLintPlugin({
            //检测哪些文件
            context: path.resolve(_dirname,"src"),
        }),
        new HtmlWebpackPlugin({
            // 模板:以public/index.html文件创建新的html文件(自动引入打包输出的资源)
            template:path.resolve(_dirname,"public/index.html"),
        }),
        new MiniCssExtractPlugin({
            filename:"static/css/main.css",
        }),
        new CssMinimizePlugin(),
    ],
    //开发服务器:不会输出资源,在内存中编译打包的
    devServer:{
        host:"localhost",// 启动服务器域名
        port:"3000",// 启动服务器端口号
        open:true, //是否自动打开浏览器
    },
    //模式
    mode:"development",
};

Eslint :可组装的Javascript和JSX 检查工具 (检测js和jsx语法的工具,可配置各项功能)

文档: https://eslint.nodejs.cn/docs/latest/use/getting-started

Babel :JavaScript编译器。主要用于将ES6语法编写的代码转换为向后 兼容 的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中

// package.json文件
"script":{
    "dev":"webpack serve --config ./config/webpack.dev.js",//启动开发服务器,内存编译打包没有输出
    "build":"webpack --config ./config/webpack.prod.js",//直接打包输出
}

生产环境:

提取css成单独文件: css打包到js文件中,当js文件加载时会创建一个style标签来生成样式,这样对网站的用户体验不好,会出现闪屏现象

解决:使用MiniCssExtractPlugin,提取css成单独文件,通过link标签加载

样式兼容性处理: postcss-loader

//package.json文件
"browserslist":[
    //"ie >= 8",
    "last 2 version",
    "> 1%",
    "not dead"
]

css压缩: CssMinimizePlugin

二、Webpack优化

1.提升开发体验

SourceMap(源代码映射) :用来生成源代码与构建后的代码一一映射的文件的方案,帮助我们更快找到错误根源。

开发模式 :cheap-module-source-map

优点:打包编译速度快,只包含行映射  缺点:没有列映射

// webpack.config.js
module.exports=[
    mode:"development",
    devtool:"cheap-module-source-map",
]

生产模式 :source-map

优点:包含行、列映射  缺点:打包编译速度更慢

// webpack.config.js
module.exports=[
    mode:"production",
    devtool:"source-map",
]

2.提升打包构建速度

3.减少代码体积

4.优化代码运行性能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack5 的相关文章

随机推荐

  • 完美解决msvcr100.dll丢失的三个方法,亲测有效

    在计算机操作中 我们常遇到故障提醒 如 msvcr100 dll丢失 这个问题通常会导致某些程序无法正常运行 给用户带来困扰 为了解决这个问题 网上有很多关于如何修复msvcr100 dll丢失的方法 在本文中 我将介绍三种常见的解决方法
  • 题解 | #输出单向链表中倒数第k个结点#

    滴滴前端日常实习一面 字节跳动前端日常实习 一面 Cider秋招一二面 已拒 贝壳编程题题解 山东offer选择 求助 选择华为还是中电14所 写论文 写论文 华为 煞笔公司 华为待遇问题 已接offer 字节跳动飞书运营实习面经 华为 煞
  • fl studio20中文内测版下载2024最新完美实现汉化

    fl studio20是一款众所周知的水果编曲软件 能够剪辑 混音 录音 它的矢量界面能更好用在4K 5K甚至8K显示器上 还可以可以编曲 剪辑 录音 混音 让你的计算机成为全功能录音室 不论是在功能上面还是用户界面上都是数一数二的 但该软
  • yolov5单目测距+速度测量+目标跟踪

    要在YOLOv5中添加测距和测速功能 您需要了解以下两个部分的原理 单目测距算法 单目测距是使用单个摄像头来估计场景中物体的距离 常见的单目测距算法包括基于视差的方法 如立体匹配 和基于深度学习的方法 如神经网络 基于深度学习的方法通常使用
  • 题解 | #输出单向链表中倒数第k个结点#

    滴滴前端日常实习一面 字节跳动前端日常实习 一面 Cider秋招一二面 已拒 贝壳编程题题解 山东offer选择 求助 选择华为还是中电14所 写论文 写论文 华为 煞笔公司 华为待遇问题 已接offer 字节跳动飞书运营实习面经 华为 煞
  • 题解 | #复制部分字符串#

    拒了华为 重回0 offer 目前在大三 寒假想找个实习 退役大学生 如题 uu们帮忙看看 25届 没有实习过 没有背过八股文 心里感觉很不稳 下学期想去暑期实习 uu们 德赛西威鸽 在中国电信公司工作一年后 我提桶跑路 东北辽宁就业求职好
  • 24届双非一本想转行测试,不知道从哪开始学,求佬指教

    避雷西安华为海思某部门 四大行软开校招值得去吗 细节见品格 北京下大雪后的各大厂动作 回暖分析 战绩结算 on 赛文X 选offer 找实习需要实习经历 华为小奖状 夸夸我导师 别羡慕我 嘿嘿 华为od前端技术面 华为海思本科14级 国家计
  • Deep learning 八

    2 使用预训练的词嵌入 有时可用的训练数据很少 以至于只用手头数据无法学习适合特定任务的词嵌人 那么可以从预计算的嵌人空间中加载嵌入向量 这个嵌人空间是高度结构化的 并且具有有用的属性 即抓住了语言结构的一般特点 而不是在解决问题的同时学习
  • Go 语言中切片的使用和理解

    切片与数组类似 但更强大和灵活 与数组一样 切片也用于在单个变量中存储相同类型的多个值 然而 与数组不同的是 切片的长度可以根据需要增长和缩小 在 Go 中 有几种创建切片的方法 使用 datatype values 格式 从数组创建切片
  • 开题报告-基于SpringBoot的求职招聘系统的设计与实现

    一 选题的根据 由于临近毕业季 同学们也即将踏上自己的岗位 择业也成为了同学们当下最为关心的问题 为了能够更加方便的服务同学们找工作 最快最有效率的方式莫过于计算机网络 所以我就因此开发了这一个求职招聘系统 为广大求职者和各企业的人事单位提
  • 24届双非一本想转行测试,不知道从哪开始学,求佬指教

    避雷西安华为海思某部门 四大行软开校招值得去吗 细节见品格 北京下大雪后的各大厂动作 回暖分析 战绩结算 on 赛文X 选offer 找实习需要实习经历 华为小奖状 夸夸我导师 别羡慕我 嘿嘿 华为od前端技术面 华为海思本科14级 国家计
  • 介绍一下傻傻分不清的两个兄弟:过滤器和拦截器之拦截器

    那么拦截器又是什么呢 它跟过滤器又有什么区别呢 实际上 拦截器可以被视为一种对过滤器的封装 在Spring框架中 拦截器提供了更加灵活和强大的功能 可以与Spring MVC等框架无缝集成 并且通常用于处理请求的前置和后置逻辑 拦截器可以实
  • FLStudio20最新2024年中文汉化版

    FLStudio21 0 2 3中文版完整下载是最好的音乐开发和制作软件也称为水果循环 它是最受欢迎的工作室 因为它包含了一个主要的听觉工作场所 最新 FL 有不同的功能 如它包含图形和音乐音序器 帮助您使完美的配乐在一个美妙的方式 此程序
  • 讯飞AI算法挑战大赛-校招简历信息完整性检测挑战赛-三等奖方案

    前言 本文公开了 讯飞AI算法挑战大赛 校招简历信息完整性检测挑战赛 赛道的技术方案和代码 本次比赛主要采用 pdf解析 和 特征工程 的方法 通过使用 lightgbm 的树模型10折交叉验证进行 二分类 的任务 最终取得三等奖的成绩 一
  • 【万字长文】搭建企业级知识库检索增强的大模型对话系统

    01 背景 ChatGPT和通义千问等大语言模型 LLM 凭借其强大的自然语言处理能力 正引领着人工智能技术的革命 但LLM在生成回复时 在 事实性 实时性 等方面存在天然的缺陷 很难直接被用于客服 答疑等一些需要精准回答的领域知识型问答场
  • React脚手架搭建

    React脚手架 脚手架 可以快速构建项目的基本架构 脚手架安装命令 可全局安装脚手架 创建项目 来到当前目录下 create react app 项目名 不要大写字母 运行项目 进到项目里 在项目目录下 执行 npm start 启动完项
  • 62_Spring整合SpringMVC

    Spring整合SpringMVC Configuration ComponentScan basePackages com wnx springmvc useDefaultFilters false includeFilters Comp
  • 中国知网职称论文查重官网入口 papergpt

    大家好 今天来聊聊中国知网职称论文查重官网入口 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 中国知网职称论文查重官网入口 背景介绍 作为中国最大的学术文献数据库 中国知网 CNKI 提供
  • 揭秘光耦合器继电器:了解技术奇迹

    光耦合器继电器 是现代电子产品的关键部件 在确保电路安全和效率方面发挥着关键作用 了解它们的功能和意义对于工程师和爱好者理解它们的应用至关重要 本文旨在揭开光耦合器继电器技术方面的神秘面纱 深入了解其功能 应用以及在电子领域的重要性 什么是
  • Webpack5

    一 Webpack基础 打包工具 将框架 React Vue ES6 Less Sass等语法编译成浏览器能识别的JS CSS 压缩代码 兼容性处理 提升代码性能等 一 entry 入口 指示Webpack 从哪个文件开始打包 二 outp