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

webpack5 (四)

react-cli 中配置

开发环境

const path = require('path')
const EslintWebpackPlugin = require('eslint-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
//封装处理样式配置
const getStyleloaders = (pre)=>{return ['style-loader','css-loader',// 处理 css 兼容性问题//需要配合 package.json 中的browserslist 来指定兼容性做到什么程度{loader: 'postcss-loader',options: {postcssOptions: {plugins: 'postcss-preset-env'}}},pre].filter(Boolean)
};
//要用 commonjs的方式以对象的模式暴露出去
module.exports = {// 入口文件entry: './src/main.js',// 出口文件output: {path: undefined,filename: 'static/js/[name].js',chunkFilename: 'static/js/[name].chunk.js',assetModuleFilename: 'static/media/[hash:10][etx][query]'},// 配置loadermodule: {rules: [// 处理 css {test: /\.css$/,use: getStyleloaders()},{test: /\.less$/,use: getStyleloaders('less-loader')},{test: /\.s[ac]ss$/,use: getStyleloaders('sass-loader')},{test: /\.styl$/,use: getStyleloaders('stylus-loader')},// 处理 图片{test:/\.(jpe?g|png|gif|webp|svg)$/,type:'asset',parser:{dataUrlCondition:{maxSize:10*1024,}}},//处理其他资源{test:/\.(woff2?|ttf)$/,type:'asset/resource'},// 处理 js{test:/\.jsx?$/,include:path.resolve(__dirname,'../src'),loader:'babel-loader',//babel 也需要有一个 babel 的配置文件options:{catchDirectory:true,catchCompression:false,plugins:['react-refresh/babel',//用来解决react脚手架下 js不能热更新的问题]}}]},// 配置plugin// 处理html plugin:[//eslint 插件也是需要有自己的配置文件new EslintWebpackPlugin({context:path.resolve(__dirname,'../src'),exclude:'node_modules',cache:true,cacheLocation:path.resolve(__dirname,'../node_modules/.catch/.eslintcache'),}),new HtmlWebpackPlugin({template:path.resolve(__dirname,'../public/index.html'),}),new ReactRefreshWebpackPlugin()//用来解决react脚手架下 js不能热更新的问题],// 环境设置mode:'development',devtool:'cheap-module-source-map',optimization:{splitChunks:{chunks:'all'},runtimeChunk:{name:(entrypoint)=>`runtime~${entrypoint.name}.js`,}},//webpack 解析模块加载选项 // 解决运行react项目时报错 Module not found:Error:can't resolve './App' in 'xx/xxx/xxx/x'resolve:{//自动补全文件扩展名extentions:['.jsx','.js','json']},devServer:{host:'localhost',port:3000,open:true,hot:true,historyApiFallback:true,//解决前端路由刷新404问题}
}

生产模式

const path = require('path')
const EslintWebpackPlugin = require('eslint-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 生产模式下不需要激活热更新
// const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
// CSS提取为单独文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// css 压缩文件
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')
// js 压缩,使用css压缩后必须使用的插件
const TerserWebpackPlugin = require('terser-webpack-plugin')
// 图片 压缩插件
const ImageMinimizerWebpackPlugin = require('image-minimizer-webpack-plugin')
// 如果出现 网站图标 需要用该复制插件将其复制到dist目录下
const CopyPlugin = require("copy-webpack-plugin");const getStyleloaders = (pre) => {return [// 'style-loader',MiniCssExtractPlugin.loader,//将style-loader替换为插件loader,打包为单独文件'css-loader',{loader: 'postcss-loader',options: {postcssOptions: {plugins: 'postcss-preset-env'}}},pre].filter(Boolean)
};
module.exports = {entry: './src/main.js',output: {path: path.resolve(__dirname, '../dist'),//设置出口文件路径filename: 'static/js/[name].[contenthash:10].js',//加入哈希值chunkFilename: 'static/js/[name].[contenthash:10].chunk.js',//加入哈希值assetModuleFilename: 'static/media/[hash:10][etx][query]',clean: true,//将上次打包内容清空},module: {rules: [{test: /\.css$/,use: getStyleloaders()},{test: /\.less$/,use: getStyleloaders('less-loader')},{test: /\.s[ac]ss$/,use: getStyleloaders('sass-loader')},{test: /\.styl$/,use: getStyleloaders('stylus-loader')},{test: /\.(jpe?g|png|gif|webp|svg)$/,type: 'asset',parser: {dataUrlCondition: {maxSize: 10 * 1024,}}},{test: /\.(woff2?|ttf)$/,type: 'asset/resource'},{test: /\.jsx?$/,include: path.resolve(__dirname, '../src'),loader: 'babel-loader',options: {catchDirectory: true,catchCompression: false,// 生产模式下不需要激活热更新// plugins:[//     'react-refresh/babel',// ]}}]},plugin: [new EslintWebpackPlugin({context: path.resolve(__dirname, '../src'),exclude: 'node_modules',cache: true,cacheLocation: path.resolve(__dirname, '../node_modules/.catch/.eslintcache'),}),new HtmlWebpackPlugin({template: path.resolve(__dirname, '../public/index.html'),}),// new ReactRefreshWebpackPlugin(),// 生产模式下不需要激活热更新// css 打包为单独文件插件new MiniCssExtractPlugin({filename: 'static/css/name.[contenthash:10].css',chunkFilename: 'static/css/name.[contenthash:10].chunk.css'}),// 复制插件 处理public下其他资源 如网站图标new CopyPlugin({patterns: [// 设置从何处复制到何处{from: path.resolve(__dirname,'../public'),to: path.resolve(__dirname,'../dist')},],globOptions: {//设置忽略 index.html 文件ignore: ['**/index.html']}}),],mode: 'production', // 改为生产模式devtool: 'source-map',//使用 source-mapoptimization: {splitChunks: {chunks: 'all'},runtimeChunk: {name: (entrypoint) => `runtime~${entrypoint.name}.js`,},// 压缩插件放在 optimization 对象内minimizer: [new CssMinimizerWebpackPlugin(),//压缩 css 插件,new TerserWebpackPlugin(),//压缩 js 插件,//压缩图片插件,new ImageMinimizerWebpackPlugin({minimizerOptions: {plugins: [["gifsicle", { interlaced: true }],["jpegtran", { progressive: true }],["optipng", { optimizationLevel: 5 }],["svgo",{plugins: extendDefaultPlugins([{name: "removeViewBox",active: false,},{name: "addAttributesToSVGElement",params: {attributes: [{ xmlns: "http://www.w3.org/2000/svg" }],},},]),},],],},}),]},resolve: {extentions: ['.jsx', '.js', 'json']},//生产模式不需要devsever// devServer:{//     host:'localhost',//     port:3000,//     open:true,//     hot:true,//     historyApiFallback:true,// }
}

合并配置

将生产模式和开发模式的配置进行合并,通过 process.env.NODE_ENV 的值来判断当前为生产环境还是开发环境。

const isProd = process.env.NODE_ENV ==='production'//三元判断 加载哪一个插件
isProd ? MiniCssExtractPlugin.loader : 'style-loader',//根据是否为生产模式来决定是否加载插件
plugins:[!isProd && 'react-refresh/babel',//用来解决react脚手架下 js不能热更新的问题
].filter(Boolean)

相关文章:

webpack5 (四)

react-cli 中配置 开发环境 const path require(path) const EslintWebpackPlugin require(eslint-webpack-plugin) const HtmlWebpackPlugin require(html-webpack-plugin) const ReactRefreshWebpackPlugin require(pmmmwh/react-refresh-webpack-plugin); //封装处理样…...

电脑硬盘数据恢复一般需要收费多少钱

随着电子信息时代的发展,个人和企业对电脑硬盘中存储的数据越发重视。然而,由于各种原因,硬盘数据丢失的情况屡见不鲜。如果您正陷入这样的困境,您可能会好奇恢复失去的数据需要花费多少钱。本文将为您介绍电脑硬盘数据恢复的一般…...

服务运营 | MSOR文章精选:远程医疗服务中的统计与运筹(二)

作者信息:王畅,陈盈鑫 编者按 在上一期中,我们分享了与远程医疗中运营管理问题相关的两篇文章。其一发表在《Stochastic Systems》,旨在使用排队论与流体近似的方法解决远程医疗中资源配置的问题;其二发表在《Managem…...

QT(9.3)定时器,绘制事件

作业: 自定义一个闹钟 pro文件: QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecat…...

python opencv

保存直播流生存逐个图片 import cv2 from threading import Threadclass ThreadedCamera(object):def __init__(self, source 0):self.capture cv2.VideoCapture(source)self.thread Thread(target self.update, args ())self.thread.daemon Trueself.thread.start()sel…...

QProcess 调用 ffmpeg来处理音频

项目场景: 在文章 qt 实现音视频的分贝检测系统中,实现的是边播放变解析音频数据来统计音频的分贝大小,并不满足实际项目的需求,有的视频声音正常,有的视频声音就偏低,即使放到最大音量声音也是比较小&…...

“深入探究SpringMVC的工作原理与入门实践“

目录 引言1. 什么是SpringMVC?1.1. 模型1.2. 视图1.3. 控制器 2. SpringMVC的工作流程2.1. 客户端发送请求2.2. DispatcherServlet的处理2.3. 处理器映射器的使用2.4. 处理器的执行2.5. 视图解析器的使用2.6. 视图的渲染 3. SpringMVC的核心组件4. 弹簧MVC总结 引言 SpringMV…...

【Node.js】Node.js安装详细步骤和创建Express项目演示

Node.js是一个开源的、跨平台的JavaScript运行环境,用于在服务器端运行JavaScript代码。它提供了一个简单的API,可以用于开发各种网络和服务器应用程序。 以下是Node.js的安装和使用的详细步骤和代码示例: 1、下载Node.js 访问Node.js官方…...

栈和队列OJ

一、括号的匹配 题目介绍: 思路: 如果 c 是左括号,则入栈 push;否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。栈 stack 为空&#xff1…...

Bootstrap的CSS类积累学习

要看哪个的介绍&#xff0c;搜索关键词就行了。 001-container 这是Bootstrap中定义的一个CSS类&#xff0c;它用于创建一个具有固定宽度的容器。比如&#xff0c;container类将<div>元素包装成一个固定宽度的容器。详情见&#xff1a;https://blog.csdn.net/wenhao_ir…...

Scala的集合操作之可变数组和不可变数组,可变List集合与不可变List集合,可变Set与不可变Set操作,可变和不可变Map集合和元组操作

Scala的集合操作之&#xff0c;可变数组和不可变数组&#xff0c;可变List集合与不可变List集合 不可变数组 /* traversable/ˈtrvəsəbl/adj.能越过的&#xff1b;可否认的*/ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr:…...

优化Docker权限管理:配置Docker用户组

Docker 利用 Linux 的用户和组权限来管理对 Docker 守护进程的访问权限。一般情况下&#xff0c;只有 root 用户和属于 docker 用户组的用户才被允许访问 Docker 守护进程。在 Linux 系统上使用 Docker 时&#xff0c;如果您尚未配置 docker 用户组&#xff0c;那么作为非 root…...

python+opencv读取rtsp流

前言 在使用yolov5做物体检测中&#xff0c;需要拉取视频流。分解任务第一步则是需要使用opencv读取rtsp流&#xff0c;只要拿到每一帧图片在进行推理显示即可。 代码 import cv2 def read_rtsp():cap cv2.VideoCapture(rtsp://admin:Vrc123456192.168.2.226:554)fourcc c…...

linux入门---动静态库的加载

目录标题 为什么会有动态库和静态库静态库的实现动态库的实现动静态库的加载 为什么会有动态库和静态库 我们来模拟一个场景&#xff0c;首先创建两个头文件 根据文件名便可以得知add.h头文件中存放的是加法函数的声明&#xff0c;sub.h头文件中存放的是减法函数的声明&#…...

计算机竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…...

【Yolov5+Deepsort】训练自己的数据集(3)| 目标检测追踪 | 轨迹绘制 | 报错分析解决

&#x1f4e2;前言&#xff1a;本篇是关于如何使用YoloV5Deepsort训练自己的数据集&#xff0c;从而实现目标检测与目标追踪&#xff0c;并绘制出物体的运动轨迹。本章讲解的为第三部分内容&#xff1a;数据集的制作、Deepsort模型的训练以及动物运动轨迹的绘制。本文中用到的数…...

docker desktop如何一键进入容器内部

对着对应的容器 点击 view files...

多机单目标跟踪Cross-Drone Transformer Network for Robust Single Object Tracking

1. 摘要 无人机已被广泛用于各种应用&#xff0c;如空中摄影和军事安全&#xff0c;因为与固定摄像机相比&#xff0c;无人机具有高机动性和广阔的视野。多架无人机跟踪系统可以通过收集不同视角的互补视频片段来提供丰富的目标信息&#xff0c;特别是当目标在某些视角下被遮挡…...

手写Mybatis:第7章-SQL执行器的定义和实现

文章目录 一、目标&#xff1a;SQL执行的定义和实现二、设计&#xff1a;SQL执行的定义和实现三、实现&#xff1a;SQL执行的定义和实现3.1 工程结构3.2 SQL执行实现的关系图3.3 执行器的定义和实现3.3.1 Executor 接口3.3.2 BaseExecutor 抽象基类3.3.3 SimpleExecutor 简单执…...

C语言基础知识理论版(很详细)

文章目录 前述一、数据1.1 数据类型1.2 数据第一种数据&#xff1a;常量第二种数据&#xff1a;变量第三种数据&#xff1a;表达式1、算术运算符及算术表达式2、赋值运算符及赋值表达式3、自增、自减运算符4、逗号运算符及其表达式&#xff08;‘顺序求值’表达式&#xff09;5…...

CG MAGIC分享3d Max中的Corona渲染器材质如何成转换VRay材质?

大家无论是使用Corona渲染器还是Vray渲染器时&#xff0c;进行材质问题时&#xff0c;都会遇到转化材质问题。 如何将CR转换成VR或者将VR转换CR材质呢&#xff1f; 对于这两者之间转换最好最好的方法只能是材质转换器。 CG MAGIC小编&#xff0c;梳理了两种方法&#xff0c;大…...

电脑入门:路由器常见问题排错步骤

HiPER系列路由器使用中Ping LAN口不通的诊断步骤 准备工作: 在可以ping通的时候记录下路由器LAN口的MAC地址: 命令hiper% show interface ethernet/1 mac Mac : 0022aa419d1e 以下步骤在ping不通路由器的时候依次操作,并记下结果: 步骤一:观察设备各端口…...

mac电脑识别不出来u盘?mac识别不了u盘怎么办

有些用户反馈说本来想要拷贝文件&#xff0c;但是将U盘插入mac系统后竟然不能识别&#xff0c;这时候我们需要用到NTFS For Mac软件。 其实mac系统只提供了它自身磁盘格式(mac os 扩展)等的读写权限&#xff0c;只提供了读的权限给NTFS、FAT32给硬盘和U盘&#xff0c;我们99%使…...

【系统编程】线程池以及API接口简介

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

Verilog零基础入门(边看边练与测试仿真)-笔记

文章目录 第一讲第二讲第三讲第四讲 第一讲 1、testbench 没有端口&#xff0c;所以没括号 2、testbench 输入端 之后要变动 所以定义为reg 3、#10 &#xff1a;过10个时间单位 &#xff1b;’timescale 1ns/10ps 即 1ns 的时间单位 10ps的时间精度 4、reg 型变量赋值的时候 用…...

LLMs之Code:Code Llama的简介、安装、使用方法之详细攻略

LLMs之Code&#xff1a;Code Llama的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年08月25日(北京时间)&#xff0c;Meta发布了Code Llama&#xff0c;一个可以使用文本提示生成代码的大型语言模型(LLM)。Code Llama是最先进的公开可用的LLM代码任务&#xff0c;并有潜…...

[国产MCU]-W801开发实例-MQTT客户端通信

MQTT客户端通信 文章目录 MQTT客户端通信1、MQTT介绍2、W801的MQTT客户端相关API介绍3、代码实现本文将详细介绍如何在W801中使用MQTT协议通信。 1、MQTT介绍 MQTT 被称为消息队列遥测传输协议。它是一种轻量级消息传递协议,可通过简单的通信机制帮助资源受限的网络客户端。 …...

搭建个人hMailServer 邮件服务实现远程发送邮件

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工…...

React的 虚拟DOM创建

React是一个流行的JavaScript库&#xff0c;用于构建用户界面。它通过使用虚拟DOM来提高性能和渲染速度。本文将详细介绍React的虚拟DOM的创建方式、用法和案例&#xff0c;以及相关代码和解释。 虚拟DOM是什么&#xff1f; 虚拟DOM是React的一个重要概念&#xff0c;它是一个…...

供热管网安全运行监测,提升供热管网安全性能

城市管网是城市的“生命线”之一&#xff0c;是城市赖以生存和发展的基础&#xff0c;在城市基础设施高质量发展中发挥着重要作用。供热管网作为城市生命线中连接供热管线与热用户的桥梁&#xff0c;担负着向企业和居民用户直接供热的重要职责。随着城市热力需求的急剧增加&…...