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

webpack基础配置【总结】

webpack打包原理
webpack是一个js应用程序的静态模块打包工具,当webpack处理应用程序时,它的内部构建一个依赖图,此时依赖会映射项目中所需的每个模块,并生成一个或多个bundle包。因此我们会安装配置各种打包规则,其中mode配置的是打包模式,开发环境或者生产环境;entry配置打包入口,根=根据commonjsES6Module模块规范分析各模块间的依赖,从而按照相关依赖关系进行打包;output配置打包出口;loader配置的是加载器,一般用于实现代码编译;plugin可配置插件,处理压缩等;resolve为解析器,其中可在alias中配置@用来替代src路径;optimization可设置优化项进行js和css压缩;devServer配合webpack-dev-server在本地启动web服务器实现项目雨来以及跨域处理;webpack是基于nodejs进行打包的,并将打包后的内容交给浏览器去访问。
proxy跨域代理原理
客户端向服务器发请求,代理服务器与客户端的域名、协议、端口号相同为同源,因此可以发送请求给代理服务器,然后请求数据通过代理服务器转发到真正的服务器获取数据,服务器与服务器之间没有域的限制,所以可将数据返回给代理服务器,然后代理服务器将数据转发给客户端。
强缓存原理
客户端基于GUI线程进行渲染,遇到img、script、link都会单独开辟新的http网络请求,并去服务器获取相关资源,返回给客户端html相关代码,客户端一旦发现对应响应头字段信息,自己将缓存资源存储到本地,并且缓存相关标识,如果需要设置强缓存,需要服务器返回资源的同时在响应头中设置expires和cache-controls,设置强缓存后如果要保证服务器资源更新同时本地资源也更新,那入口文件index.html一定不能设置强缓存,需要通过打包文件名不同进行更新其内容。

// 在webpack.config.js文件中
const path = require('path') // node内置的路径处理模块
const HtmlWebpackPlugin = require('html-webpack-plugin') // 打包编译的html,对打包后的html进行压缩处理
const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 自动删除之前打包的文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将css文件提取到单独的文件
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin') // 压缩css文件
const TerserWebpackPlugin = require('terser-webpack-plugin') //  压缩js文件// 多页面入口需要的配置
// 前提我们设置的名字和src、public入口页面模版名字相同,打包后的文件也基于命名
const pageArr = ['index','login']
const entryObj = {}
const htmlPlugin = []
pageArr.forEach((chunk)=>{entryObj[chunk] = `./src/${chunk}.js`htmlPlugin.push(new HtmlWebpackPlugin({template:`./public/${chunk}.html`, // 指定页面模版filename:`${chunk}.html`, // 打包后文件名称minify:true, // 视都压缩chunks:[chunk] // 指定导入资源的名称}))
})module.exports = {// 基础设置mode: 'production', // 打包模式entry: './src/index.js', // 单页面入口// 多页面入口// entry: entryObjoutput:{filename:'main.[hash:8].js',// [hash:8]为打包后的文件创建哈希值,代码被修改生成文件名中哈希值也变化,有助于强缓存的设置path:path.resolve(__dirname,'./dist')},// 优化项,设置压缩方式optimization:{minimizer: [new CssMinimizerWebpackPlugin(),new TerserWebpackPlugin()]},// 使用插件plugins:[new HtmlWebpackPlugin({template:'./public/index.html',filename:'index.html',minify:true}),new CleanWebpackPlugin(),new MiniCssExtractPlugin({// 打包后的css文件名称,单独提取到css文件中,并自动导入html文件filename:'main.[hash:8].css'})],// dev-serverdevServer:{host:'127.0.0.1', // 域名port:3000, // 端口号open:true, // 自动打开浏览器hot:true, // 热更新compress:true, // 开启服务器端的gizp压缩proxy:{ // 跨域处理'/api':{target:'http://www.com.wd', // 代理真正的服务器地址pathRewrite:{'^/api':''}, // 地址重写,主要用于区分不同代理前缀,从最后请求的真正地址中移除changeOrigin:true, // 修改请求头中origin源信息ws:true // 支持webscoket通信机制}}},// loader加载器:执行顺序 上->下 右->左module:{rules:[{test: /.\(css|less)$/, // 基于正则匹配,我们需要处理的文件use:[{MiniCssExtractPlugin.loader, // 抽离css代码// "style-loader", // 把css以内嵌式导入页面"css-loader", // 处理特殊语法// 在package.json文件中设置browserslist浏览器兼容性// 在postcss.config.js文件中设置插件导入autoprefixer设置css3样式问题"postcss-loader", // 配合autoprefixer&browserslist给css3属性设置前缀"less-loader" // 将less编译为css},{// 在babel.config.js文件中将es6转化为es5,@babel/preset-envtest: /.\js$/,use:["babel-loader"],// 有关js兼容性处理,将es6转化为es5,使用babel-loader、@babel/preset-env、@babel/core、@browserslist// es6内置api的兼容,导入@babel/polyfill,对常见内置api进行重写,但对fetch、reflect没有重写exclude: /node_modules/ // 可优化打包速度,忽略node_modules},{// 图片引入静态资源地址进行渲染,遇到静态资源图片会重新向服务器发送请求,然后编码再进行渲染,图片速度会较慢// 将图片转化为base64格式,可以直接不用向服务器发送请求,这样图片渲染速度会加快// js中处理静态资源图片,需要基于ESModule规范导入,这样打包才会对此图片进行打包,如果写相对地址打包后地址会不一样,找不到图片test: /\.(png|jpe?g|gif)$/i,type:'javascript/auto', // webpack5需要的use:[{loader: 'url-loader',options:{limit:200*1024, // 将指定大小内的图片转化为base64esModule:false,name: 'images/[name].[hash:8].[ext]' // 编译后没有转化为base64的图片,编译输出的路径和名称}}]}]}]},// 设置打包最大资源大小performance:{maxAssetSize:100*1024*1024,maxEntrypointSize:100*1024*1024},// 解析器resolve:{// @以后代表的就是src这个路径alias:{ '@':path.resolve(__dirname,'./src') }}}

相关文章:

webpack基础配置【总结】

webpack打包原理: webpack是一个js应用程序的静态模块打包工具,当webpack处理应用程序时,它的内部构建一个依赖图,此时依赖会映射项目中所需的每个模块,并生成一个或多个bundle包。因此我们会安装配置各种打包规则&…...

typescript 支持与本地调试

typescript 支持与本地调试 typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址 前言 在上一章节,我们创建了一个 hello world 函数,并把它顺…...

后端面试话术集锦第 十八 篇:JVM面试话术

这是后端面试集锦第十八篇博文——JVM面试话术❗❗❗ 1. 介绍下JVM JVM主要包括:类加载器(class loader)、执行引擎(exection engine)、本地接口(native interface)、运行时数据区(Runtimedata area) 类加载器:加载类文件到内存。Class loader只管加载,只要符合文件…...

“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!

时隔近半个世纪,新中国第一次参与亚运会的影像资料将首次对外披露。只是年代久远,老照片老视频都有了岁月痕迹,画面不再清晰,这些珍贵史料急需你的帮助! 一、活动介绍 2023年,正值亚运110周年&#xff0c…...

uni-app 之 scroll-view和swiper

uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--> <template><view><navigator url"/pages/home/home"><button style"background: #ff00f…...

Harmony网络请求工具类

使用的网络请求框架是axios 1、安装axios ohpm install @ohos/axios2、封装 import axios, { FormData } from "@ohos/axios" import fs from @ohos.file.fs import ArrayList from @ohos.util.ArrayList/*** 网络请求工具类*/ class HttpManager {baseUrl:string…...

【Python 自动化】自媒体剪辑第一版·思路简述与技术方案

大家都知道我主业是个运维开发&#xff08;或者算法工程师&#xff09;&#xff0c;每天时间不多&#xff0c;但我又想做自媒体。然后呢&#xff0c;我就想了个方案&#xff0c;每天起来之后写个短视频的脚本&#xff0c;包含一系列图片和文字&#xff0c;然后上班的时候给它提…...

【前端】webpack打包去除console.log

0 问题 需要在打包的时候&#xff0c;自动地去除掉所有console.log 1 方法 // vue.config.js //... module.exports {//...config.optimization.minimizer[0].iptions.terserOptions.compress.drop_console true//... } //...也可以用if(process.env.NODE_ENV production…...

docker使用(二)提交到dockerhub springboot制作镜像

docker使用&#xff08;二&#xff09; dockerhub创建账号创建存储库成功&#xff01;开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 &#xff08;自认为可以理解为github一类的东西&#xff09; 单击创建存储库按钮。 设定存…...

antd中Popover 气泡卡片样式修改

最近在开发react项目的一个新需求时&#xff0c;遇到气泡卡片Popover组件样式调整的问题&#xff0c;发现不管是在标签中设置className属性&#xff0c;还是在<Popover>标签中直接设置style属性&#xff0c;都不起作用。 最后搜索查阅发现要使用overlayClassName index…...

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?

终于二战上岸了&#xff0c;二战华为也并不是说非华为不可&#xff0c;只是觉得心里憋着一口气&#xff0c;这就导致我当时有其他比较好的offer&#xff0c;我也没有去&#xff0c;就是想上岸华为来证明自己,现在也算是如愿了&#xff0c;来跟大伙们分享一下~ 个人情况 我本人…...

Kali之BurpSuite_pro安装配置

文章目录 配置jdk环境安装BurpSuitePro设置快捷方式启动方式 BurpSuite2021专业版本地址&#xff1a; 下载链接&#xff1a;https://pan.baidu.com/s/1PjzcukRDoc_ZFjrNxI8UjA 提取码&#xff1a;nwm7 我的安装工具都在/home/kali/tools/ 解压后我放在burpsuite_pro目录下 把j…...

双指针算法总结

双指针 常见的双指针有两种形式&#xff1a;对撞指针&#xff0c;左右指针。 对撞指针&#xff1a; 对撞指针一般用于顺序结构中&#xff0c;也称左右指针。 • 对撞指针从两端向中间移动。以个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼…...

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题&#xff0c;顺便折腾的。虽然软件跑起来了&#xff0c;但是他遇到的问题&#xff0c;超出了老苏的认知。当然最终问题还是得到了解决&#xff0c;不过与 LibrePhotos 无关&#xff1b; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…...

Linux指令

1 Linux 系统目录结构 /bin 存放系统指令&#xff08;可执行文件&#xff09; /boot 存放linux系统开机引导程序 /dev 存放设备文件的地方 /etc 存放系统配置文件的地方 /home 存放用户家目录的地方。 /lib和/lib64 存放系统动态链接库的地方。 /lostfound linux文件系统下特有…...

如何在Mac电脑上安装WeasyPrint:简单易懂的步骤

1. 安装homebrew 首先需要确保安装了homebrew&#xff0c;通过homebrew安装weasyprint可以将需要的库都安装好&#xff0c;比pip安装更简单快捷。 安装方法如下&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&qu…...

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信&#xff0c;了解到这应该是基层网络通信的原理&#xff0c;于是就导出搜索了一下相关的资料&#xff0c;简单来说scoket通信就是&#xff0c;可以让不同设备在同一个网络环境的条件下&#xff0c;可以实现相互通…...

软考高级之系统架构师之系统安全性和保密性设计

今天是2023年08月31日&#xff0c;距离软考高级只有65天&#xff0c;加油&#xff01; 备注&#xff1a;资料搜集自网络。 基础 信息必须依赖于存储、传输、处理及应用的载体&#xff08;媒介&#xff09;而存在。信息系统安全可以划分设备安全、数据安全、内容安全和行为安…...

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制&#xff0c;包括电机编码器值读取&#xff0c;电机速度、正反转控制&#xff0c;PID算法&#xff0c;卡尔曼滤波&#xff0c;最终实现对电机速度进行控制&#xff0c;使其能够渐近设定的编码器目标值。 一、设计思路 前面通过SOPC之NIOS Ⅱ实现电…...

C++中的volatile

volatile的本意是“易变的”&#xff0c;是一种类型修饰符&#xff0c;用它声明的类型变量表示可以被某些编译器未知的因素更改&#xff0c;比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量&#xff0c;编译器对访问该变量的代码就不再进行优化&#xff0c;从而可…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...