webpack的基本使用

UE5网络模块实战:属性复制、RPC与联机开发踩坑指南 多人联机开发中,网络同步是核心难题。UE5网络模块以服务器权威为基础,通过Actor复制、RPC和所有权机制实现多端状态一致。理解属性复制与OnRep回调、区分Server/Client/Multicast RPC的适用场景,是构建稳定联机架构的关键。本文结合数字孪生与多端协作场景,探讨如何将渲染与逻辑分离,并针对打包后网络失效、端口防火墙、崩溃排查等工程实践问题给出解决方案。通过蓝图接口解耦表现层,利用C++创建StaticMesh组件实现服务器逻辑与客户端表现分离,同时注意专用服务器不加载渲染依赖(如D 阅读详情

概念

webpack概念请移步阅读官网

loader解析不同文件类型

解析txt

module: {
  rules: [
    {
      test: /\.txt$/, 
      use: 'raw-loader'
    }
}

解析es6和react jsx

module: {
  rules: [
    {
      test: /\.js$/,
      use: 'babel-loader'
    },
}

babel的配置⽂件是:.babelrc,需要安装的依赖如下

  • @babel/core
  • @babel/preset-env
  • babel-loader

支持react react-dom,需要安装的依赖如下

  • react
  • react-dom
  • @babel/preset-react
// .babelrc文件
{
  "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
  ]
}

解析css、less

  • css-loader ⽤于加载 .css ⽂件,并且转换成 commonjs 对象
  • style-loader 将样式通过 <style>标签插⼊到 head 中
module: {
  rules: [
	 {
	   test: /\.css$/,
	   use: ['style-loader', 'css-loader']
	 },
	 {
	   test: /\.less$/,
	   use: ['style-loader', 'css-loader', 'less-loader']
	 }
  ]
}

解析图片和字体

  • url-loader内部也是由file-loader实现的,不超过limit限制的大小,会将其转化为base64格式
module: {
  rules: [
    {
      test: /\.(png|svg|jpg|gif)$/,
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 10240,
          }
        }
      ]
    },
    {
      test: /\.(woff|woff2|eot|ttf|otf)$/,
      use: ['file-loader']
    }
  ]
}

文件指纹策略

  • Hash:和整个项⽬的构建相关,只要项⽬⽂件有修改,整个项⽬构建的 hash 值就会更改
  • Chunkhash:和 webpack 打包的 chunk 有关,不同的 entry 会⽣成不同的 chunkhash值
  • Contenthash:根据⽂件内容来定义 hash ,⽂件内容不变,则 contenthash 不变

那为什么要使用文件指纹策略呢?我认为最重要的是缓存,通过文件指纹可以判断文件是否被修改,如果文件没有被修改,则可以使用浏览器缓存。

在这里插入图片描述
分析了原因,那就需要根据实际情况选择选择不同的文件策略

  • 多页面应用的情境下,不能因为A页面的js发生了改变,而导致B页面的js也要跟着改变。所以使用chunkhash比较合适
  • 只有js修改的情况下,css没有进行修改,那么css文件使用contenthash是比较合适的(css需要抽离出来)

在这里插入图片描述

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
    entry: {
        index: './src/index.js',
        search: './src/search.js'
    },
    output: {
        path: path.join(__dirname, 'dist'),
        filename: '[name]_[chunkhash:8].js'
    },
    mode: 'production',
    module: {
        rules: [
            {
                test: /.js$/,
                use: 'babel-loader'
            },
            {
                test: /.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            },
            {
                test: /.less$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'less-loader'
                ]
            },
            {
                test: /.(png|jpg|gif|jpeg)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name]_[hash:8].[ext]'
                        }
                    }
                ]
            },
            {
                test: /.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name]_[hash:8][ext]'
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: '[name]_[contenthash:8].css'
        })  
    ]
};

压缩文件

css、html、js压缩

  • css使用插件optimize-css-assets-webpack-plugin进行压缩
  • html使用html-webpack-plugin压缩
  • mode为production时,内置了 uglifyjs-webpack-plugin,js会自行压缩
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: {
        index: './src/index.js',
        search: './src/search.js'
    },
    output: {
        path: path.join(__dirname, 'dist'),
        filename: '[name]_[chunkhash:8].js'
    },
    mode: 'production',
    module: {
        rules: [
            {
                test: /.js$/,
                use: 'babel-loader'
            },
            {
                test: /.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            },
            {
                test: /.less$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'less-loader'
                ]
            },
            {
                test: /.(png|jpg|gif|jpeg)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name]_[hash:8].[ext]'
                        }
                    }
                ]
            },
            {
                test: /.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name]_[hash:8][ext]'
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: '[name]_[contenthash:8].css'
        }),
        new OptimizeCSSAssetsPlugin({
            assetNameRegExp: /\.css$/g,
            cssProcessor: require('cssnano')
        }),
        // 需要设置模板html,打包后会将bundle文件注入html中
        new HtmlWebpackPlugin({
            template: path.join(__dirname, 'src/index.html'),
            filename: 'index.html',
            chunks: ['index'],
            inject: true,
            minify: {
                html5: true,
                collapseWhitespace: true,
                preserveLineBreaks: false,
                minifyCSS: true,
                minifyJS: true,
                removeComments: false
            }
        }),
        new HtmlWebpackPlugin({
            template: path.join(__dirname, 'src/search.html'),
            filename: 'search.html',
            chunks: ['search'],
            inject: true,
            minify: {
                html5: true,
                collapseWhitespace: true,
                preserveLineBreaks: false,
                minifyCSS: true,
                minifyJS: true,
                removeComments: false
            }
        })  
    ]
};

为方便打包,使用clean-webpack-plugin自动清理构建目录,默认会删除 output 指定的输出⽬录

····
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
	 // 略
	 output: {
	    path: path.join(__dirname, './dist'),
	    filename: '[name].[chunkhash:8].js'
  	},
	plugins: [
	 	new CleanWebpackPlugin(),
	]
	// 略
}

热更新

  1. 安装webpack-dev-server
  2. package.json文件中添加命令行,”dev": “webpack-dev-server --open”
  3. webpack.dev.js中添加如下代码
devServer: {
    contentBase: './dist',
    hot: true
}
科研级实战】YOLOv11 pose部署至RK3588全流程:让姿态估计模型在边缘端毫秒级运行,我来帮你突破人体行为分析落地壁垒 在智慧安防人体行为分析场景中,基于YOLOv11 pose的模型在云端推理单帧耗时150ms,硬件成本超15000元;经本方案部署到RK3588后,单帧推理耗时降至30ms,硬件成本仅4000元,且关键点检测准确率高达93%以上。在运动姿态评估场景,同款技术路径使模型边缘端推理速度提升6倍,姿态分类精度达95%。这意味着,你也能让自己的姿态估计模型在边缘设备上实现的工业化落地,接下来让我们开启从模型训练到端侧部署的实战征程。 阅读详情

相关推荐

小白快速上手 labelimg:新手图像标注详解教程

本教程主要帮助没有使用过labelimg的小白上手该软件,快速学会基本操作和打标签,为数据集准备打下基础。

小白一枚~ 2万+

如何获取手机app的MD5值

例如,输入adb pull /data/app/com.tencent.mm-1/base.apk C:\Users\username\Desktop\wechat.apk,就可以将微信APP的安装包复制到电脑桌面上,并命名为wechat.apk。例如,输入adb shell pm path com.tencent.mm,就可以得到微信APP的安装路径,类似于/data/app/com.tencent.mm-1/base.apk。,将APP安装包(apk文件)上传到工具中,就可以得到它的MD5值了。

lilaihao1030的博客 5782

保姆级教程:用LoRA微调Chinese-Mistral-7B模型,并一键部署到Ollama(附完整代码)

本文提供了一份详细的LoRA微调Chinese-Mistral-7B模型的保姆级教程,涵盖环境配置、数据预处理、微调实战、模型量化及Ollama部署全流程。通过实战案例和完整代码,帮助开发者快速构建专属中文大模型,适用于医疗、法律等垂直领域。

weixin_30369041的博客 251

如何查看APK的MD5签名及无法显示MD5签名的解决办法

之前的文章内已经介绍了不少的关于Android环境下出Apk 包遇到的各种填坑操作,以及一些设置小技巧,但坑是未知的,今天又踩一个坑,这次的问题是和电脑环境有关的。于是下面记录一下。

浅墨的博客 7171

5分钟搞懂双目相机标定:从棋盘格到3D点云的完整流程(附Python代码)

本文详细介绍了双目相机标定的完整流程,从棋盘格准备到3D点云生成,涵盖单目标定、双目标定、立体校正、视差计算等关键步骤。通过Python代码示例,帮助读者快速掌握双目立体视觉技术,实现高精度的3D重建。特别适合机器人导航、工业检测等应用场景。

weixin_29100399的博客 588

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

10-webpack打包其他资源

其他资源 不需要优化和压缩处理,直接输出的资源,称为其他资源。 webpack.config.js module: { //css打包规则 rules: [{ test: /\.css$/, //把项目中所有以.css结尾的文件打包,插入到html里 use: [MiniCssExtractPlugin.loader, "css-loader", "postcss-loader"] ..

qq_33290233的博客 192

webrtc+uniapp(h5和app)实现在线聊天功能 uniapp+网页+服务端源码

uniapp端代码 服务端代码 public/index.html

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 755

查看APK中MD5签名的方法

事先需要自己有JDK环境变量 1. 先将apk文件重命名为zip文件,在 解压zip,其中的META-INF/CERT.RSA文件即MD5签名文件 2. cmd下打开黑窗口,敲入如下命令: keytool -printcert -file //rsa文件所在路径   证书指纹中的MD5去掉冒号

曲终人散 9386

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。 那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

努力前行,总会成为自己心中的那道光 6万+

你的小程序地图功能还只是“摆设”吗?支付宝地图API的深度玩法都在这里了!

🏆本文收录于《滚雪球学支付宝小程序开发》专栏,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1823

如何查看apk中MD5和SHA256值

如何查看apk中MD5和SHA256值

cike123_的博客 2924

摩尔线程嵌入式面试题及参考答案(2万字长文)

说一下你对 drm 框架的理解。 DRM(Direct Rendering Manager)是 Linux 系统中用于管理图形显示设备的一个重要框架。 从架构层面来讲,它处于内核空间,主要目的是为用户空间的图形应用程序提供一个统一的接口来访问图形硬件。DRM 包括内核态的驱动模块和用户态的库。内核态的驱动负责和硬件进行交互,比如对显存的管理、硬件寄存器的配置等。用户态的库则方便应用程序利用内核态提供的功能进行图形渲染等操作。 在图形显示的具体流程中,DRM 可以控制显示设备的分辨率、刷

大模型大数据攻城狮的专栏 1229

【webpack】webpack的基本使用

整理了一些webpack4基本的使用

weixin_43655896的博客 8037

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Vue】webpack的基本使用

好处:前端开发自成体系,有一套标准的开发方案和流量。概念: webpack是前端项目工程化的具体解决方案。主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆,处理浏览器端JavaScript的兼容性性能优化等强大的功能。好处:让程序员把工作的重心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。注意:目前Vue,React等前端项目,基本上都是基于webpack进行工程化开发的。步骤 import和require导入模块的区别 1、require对应导出的方法是module.export

m0_62360527的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Webpack的基本使用

一、什么是Webpack Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。 从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。 二、Webpack安装 1、全局安装 npm install -g webpack webpack-cli 2、安装后查看版本号 webpack -v 三、初始化项目 1、创建webpack文件夹 进入webpack目录,执行命

大白菜的博客 4万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

webpack 的基本使用

1. 什么是 webpack 概念:webpack 是前端项目工程化的具体解决方案。 主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端 JavaScript 的兼容性、性 能优化等强大的功能。 好处:让程序员把工作的重心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。 注意:目前 Vue,React 等前端项目,基本上都是基于 webpack 进行工程化开发的。 2.在项目中安装 webpack 在终端运行如下的命令,安装 webpack

weixin_48341937的博客 2250

Webpack基本配置

目录一、Webpack基本概念概念:webpack的四个核心概念:webpack的模式:webpack的两种安装方式二、webpack的基本使用2.1 命令行方式(每次修改需手动输入命令重新打包)2.2 webpack的配置文件方式2.3 实现webpack的热更新2.3.1 webpack-dev-server的几个指令2.3.2 使用`html-webpack-plugin`插件配置启动页面2.4 webpack配置打包静态文件2.4.1 打包css,less,scss文件2.4.2 图形路径和字体文件

冰冰凉的博客 5406

webpack的安装和基本使用

webpack概念 中文文档官网: https://www.webpackjs.com/ 网页中常用的静态资源: JS(.js .jsx .coffee .ts(TypeScript中间语言,不能自浏览器中运行,需要编译器进行编译为js语言))  CSS(.css .less .sass -&gt; .scss 类似于.less)  Images(.jpg .png .gif .bmp .sv...

Rnger的博客 2万+

webpack基本使用

基本使用 新建项目空白目录,并运行npm init -y命令初始化包管理配置文件package.json 新建src源代码目录 在src目录下,新建index.html首页 初始化首页基本结构 执行npm i webpack webpack-cli -D 安装webpack包 在项目根目录创建名为webpack.config.js配置文件,并在该文件中初始化以下配置: ` module.exports = { mode: 'development }'` development为开发环

javaxampp的博客 345

webPack基本使用步骤

保持html文件内容不动,直接修改index.js源文件的内容,刷新浏览器,发现日志输入结果变化了,说明我们在修改源文件的同时,webpack已经检测到变化并帮我们更新了打包文件。可以看到根据我们配置的output信息,新建了dist文件夹和下面的bundle.js文件,bundle.js文件就是我们打包后的文件,其包含了源文件index.js的信息。简单来说,webpack就是一个打包工具,可以将相互依赖的html,css,js以及图片字体等资源文件,经过处理打包成一个可执行的项目文件。

nleqaaa的博客 877
上一篇: nodejs实现登录认证功能--使用session方式
下一篇: webpack之css样式增强
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值