webpack 优化
打包优化
- webpack 优化
- 1、依赖转化,兼容低版本浏览器
- 2、生产环境关闭sourceMap
- 3、打包输出目录名称修改和静态资源的存放
- 4、修改图标
- 5、修改webpack配置
- 5-1、写在此处的配置可以覆盖掉脚手架本来就预设上有的配置
- 5-2、写在此处的都是预设没有配置的,脚手架本来就有的配置是不会覆盖的
- 6、完整配置
- vite 优化
webpack 优化
1、依赖转化,兼容低版本浏览器
// 对依赖进行转换
transpileDependencies: true,
2、生产环境关闭sourceMap
// 生产关闭sourceMap
productionSourceMap: false,
3、打包输出目录名称修改和静态资源的存放
outputDir: 'bundle', // 打包后文件的目录 (默认为dist)
assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录 默认为‘’没有单独目录js/css/img在根目录中。
4、修改图标
// 修改浏览器的icon图标,不加下面的,修改浏览器图标不生效
pwa: {iconPaths: {favicon32: 'favicon.ico',favicon16: 'favicon.ico',appleTouchIcon: 'favicon.ico',maskIcon: 'favicon.ico',msTileImage: 'favicon.ico',}
}
5、修改webpack配置
5-1、写在此处的配置可以覆盖掉脚手架本来就预设上有的配置
chainWebpack: config => {config.optimization.minimizer('terser').tap(args => {// 删除代码中的注释和打印,减少一点代码体积args.forEach(item => {if (item.hasOwnProperty('terserOptions')) {Object.assign(item['terserOptions'].compress, {drop_debugger: true,drop_console: true,pure_funcs: ['console.log']})}item['terserOptions']['format'] = {comments: false}})return args})// 开启 gzip 压缩if (process.env.NODE_ENV === "production") {config.plugin('CompressionPlugin').use(new CompressionWebpackPlugin({test: /\.(js|css|less|scss|html)$/, // 将 css、scss、less、html 进行压缩threshold: 10240, // 超过10kb的文件就压缩deleteOriginalAssets: false, // 不删除源文件minRatio: 0.8, // 最小压缩率 0.8algorithm: 'gzip'}))}
}
5-2、写在此处的都是预设没有配置的,脚手架本来就有的配置是不会覆盖的
configureWebpack: {// 代码分割optimization: {splitChunks: {chunks: "all",// 定义一个cache组,将第三方的包抽离出来cacheGroups: {elementUI: {// 抽离出来的名字name: "element-chunk-vendors",// 在node_modules包里面找test: /[\\/]node_modules[\\/]_?element-ui(.*)/,// 权重,越大优先打包priority: 30,},vue: {name: "vue-chunk-vendors",test: /[\\/]node_modules[\\/]vue(.*)[\\/]/,chunks: "initial",priority: 20,reuseExistingChunk: true,},vueRouter: {name: "vueRouter-chunk-vendors",test: /[\\/]node_modules[\\/]vue-router(.*)[\\/]/,chunks: "initial",priority: 19,},vuex: {name: "vuex-chunk-vendors",test: /[\\/]node_modules[\\/]vuex(.*)[\\/]/,chunks: "initial",priority: 18,},echarts: {name: "echarts-chunk-vendors",test: /[\\/]node_modules[\\/]echarts(.*)[\\/]/,chunks: "initial",priority: 17,},// 剩下的别忘记单独抽离libs: {name: "chunk-libs-vendors",test: /[\\/]node_modules[\\/]/,priority: 1, // 权重最低,优先考虑前面内容chunks: "initial",},// 针对自己写的代码,重复使用的满足下面的配置就会抽离出来单独打包,比如 utils 下面的包default: {// 其他没有写的配置会使用上面的默认值test: /[\\/]src(.*)[\\/]/,name: "common-chunk",minSize: 20000, // 超过 20kb,就会拆包minChunks: 2, // 引用两次就会拆包priority: -10,reuseExistingChunk: true}}}},// 配置别名resolve: {alias: {"#": path.resolve(__dirname, "src")}},// 分析插件plugins: [new BundleAnalyzer({analyzerMode: 'server',analyzerHost: '127.0.0.1',analyzerPort: 8088,reportFilename: 'report.html',defaultSizes: 'parsed',openAnalyzer: true,generateStatsFile: false,statsFilename: 'state.json',statsOptions: null,logLevel: 'info'})]
}
6、完整配置
const path = require("path")
const { defineConfig } = require('@vue/cli-service')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const BundleAnalyzer = require('webpack-bundle-analyzer').BundleAnalyzerPluginmodule.exports = defineConfig({// 对依赖进行转换transpileDependencies: true,// 生产关闭sourceMapproductionSourceMap: false,outputDir: 'bundle', // 打包后文件的目录 (默认为dist)assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录 默认为‘’没有单独目录js/css/img在根目录中。// 修改浏览器的icon图标pwa: {iconPaths: {favicon32: 'favicon.ico',favicon16: 'favicon.ico',appleTouchIcon: 'favicon.ico',maskIcon: 'favicon.ico',msTileImage: 'favicon.ico',}},// webpack 配置(写在此处的配置可以覆盖掉脚手架本来就预设上有的配置)chainWebpack: config => {config.optimization.minimizer('terser').tap(args => {// 删除代码中的注释和打印,减少一点代码体积args.forEach(item => {if (item.hasOwnProperty('terserOptions')) {Object.assign(item['terserOptions'].compress, {drop_debugger: true,drop_console: true,pure_funcs: ['console.log']})}item['terserOptions']['format'] = {comments: false}})return args})// 开启 gzip 压缩,对应的 nginx 也需要配置if (process.env.NODE_ENV === "production") {config.plugin('CompressionPlugin').use(new CompressionWebpackPlugin({test: /\.(js|css|less|scss|html)$/, // 将 css、scss、less、html 进行压缩threshold: 10240, // 超过10kb的文件就压缩deleteOriginalAssets: false, // 不删除源文件minRatio: 0.8, // 最小压缩率 0.8algorithm: 'gzip'}))}},// webpack 配置(写在此处的都是预设没有配置的,脚手架本来就有的配置是不会覆盖的)configureWebpack: {// 代码分割optimization: {splitChunks: {chunks: "all",// 定义一个cache组,将第三方的包抽离出来cacheGroups: {elementUI: {// 抽离出来的名字name: "element-chunk-vendors",// 在node_modules包里面找test: /[\\/]node_modules[\\/]_?element-ui(.*)/,// 权重,越大优先打包priority: 30,},vue: {name: "vue-chunk-vendors",test: /[\\/]node_modules[\\/]vue(.*)[\\/]/,chunks: "initial",priority: 20,reuseExistingChunk: true,},vueRouter: {name: "vueRouter-chunk-vendors",test: /[\\/]node_modules[\\/]vue-router(.*)[\\/]/,chunks: "initial",priority: 19,},vuex: {name: "vuex-chunk-vendors",test: /[\\/]node_modules[\\/]vuex(.*)[\\/]/,chunks: "initial",priority: 18,},echarts: {name: "echarts-chunk-vendors",test: /[\\/]node_modules[\\/]echarts(.*)[\\/]/,chunks: "initial",priority: 17,},// 剩下的别忘记单独抽离libs: {name: "chunk-libs-vendors",test: /[\\/]node_modules[\\/]/,priority: 1, // 权重最低,优先考虑前面内容chunks: "initial",},// 针对自己写的代码,重复使用的满足下面的配置就会抽离出来单独打包,比如 utils 下面的包default: {// 其他没有写的配置会使用上面的默认值test: /[\\/]src(.*)[\\/]/,name: "common-chunk",minSize: 20000, // 超过 20kb,就会拆包minChunks: 2, // 引用两次就会拆包priority: -10,reuseExistingChunk: true}}}},// 配置别名resolve: {alias: {"#": path.resolve(__dirname, "src")}},plugins: [new BundleAnalyzer({analyzerMode: 'server',analyzerHost: '127.0.0.1',analyzerPort: 8088,reportFilename: 'report.html',defaultSizes: 'parsed',openAnalyzer: true,generateStatsFile: false,statsFilename: 'state.json',statsOptions: null,logLevel: 'info'})]}
})// 打包分析工具加了之后 启动需要加上:"build": "vue-cli-service build","build:analyze": "cross-env NODE_ENV=production npm_config_report=true vue-cli-service build"
vite 优化
相关文章:
webpack 优化
打包优化 webpack 优化1、依赖转化,兼容低版本浏览器2、生产环境关闭sourceMap3、打包输出目录名称修改和静态资源的存放4、修改图标5、修改webpack配置5-1、写在此处的配置可以覆盖掉脚手架本来就预设上有的配置5-2、写在此处的都是预设没有配置的,脚手…...
保障 Golang 项目安全的最佳实践
对任何项目来说,安全都是一个永恒的话题,本文详细讲解一下保障 Golang 项目的安全性需要遵循一些最佳实践。 对源代码和构建出的二进制文件做全面的安全扫描 定期对源代码和二进制文件进行全面的安全扫描,查找漏洞,以便及早识别…...
PG物理备份与恢复之pg_basebackup
PG物理备份与恢复之pg_basebackup 开启WAL日志归档pg_basebackup备份工具全库恢复:recovery.conf 🐘 数据库版本:PostgreSQL 10.4 开启WAL日志归档 通过数据库的全量备份和WAL日志,可以将数据库恢复到任意时间点。每个WAL日志文件…...
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
1 bug描述 使用vscode执行npm run dev指令时出现 “npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次 “ 的错误提示,原因是系统里没有安装n…...
Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能
1.概述 在13.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb…...
Ubuntu 22.04配置/etc/rc.local开机自启文件
1.查看系统版本 rootbogon-virtual-machine:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy rootbogon-virtual-machine:~ 2. 解决 /etc/rc.local 开机启动问题 看rc-loc…...
python爬虫之正则表达式解析实战
文章目录 1. 图片爬取流程分析2. 实现代码—爬取家常菜图片 1. 图片爬取流程分析 先获取网址,URL:https://www.xiachufang.com/category/40076/ 定位想要爬取的内容使用正则表达式爬取导入模块指定URLUA伪装(模拟浏览器)发起请求…...
什么是虚拟dom?
虚拟DOM是利用js描述元素与元素的关系,用js对象来表示真实的dom树结构,创建一个虚拟的dom对象。 虚拟DOM的原理是根据真实DOM生成一个js对象,里面有元素、属性和文本,这些与真实DOM中的元素、属性、文本一一对应。虚拟DOM可以更好…...
大数据学习(18)-任务并行度优化
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
C++学习笔记之四(标准库、标准模板库、vector类)
C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器2.1.4、vector与算法 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray),它定义了十个大类…...
IDEA部署SSM项目mysql数据库MAVEN项目部署教程
如果 SSM 项目是基于 Maven 构建的,则需要配置 maven 环境,否则跳过这一步 步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默…...
uniapp 将流转化为视频并播放 微信小程序
该问题最关键的一步是将后端传回来的流,转化成视频,并播放。 1、从服务器请求数据流到前端 2、新建一个临时文件,将数据流写入这个文件里面,并自定义路径命名。 const fs wx.getFileSystemManager(); //获取全局唯一的文件管理…...
【软考】系统集成项目管理工程师(十)项目质量管理【3分】
一、质量概念 1、定义 国际:反应实体满足主体明确和隐含需求的能力的特性总和 国内:一组固有特性满足要求的程度 2、质量与等级 质量:作为实现的性能或成果,是一系列内在特性满足要求的程度ISO9000 等级:作为设计意…...
七层负载均衡 HAproxy
一、HAproxy 1、负载均衡类型: (1) 无负载均衡: 没有负载均衡,用户直接连接到 Web 服务器。当许多用户同时访问服务器时,可能无法连接。 (2) 四层负载均衡: 用户访问负载均衡器,负载均衡器将用户的请求…...
SQL SELECT TOP, LIMIT, ROWNUM
SQL SELECT TOP 子句 SELECT TOP 子句用于指定要返回的记录数量。 SELECT TOP子句在包含数千条记录的大型表上很有用。返回大量记录会影响性能。 注:并不是所有的数据库系统都支持SELECT TOP子句。MySQL支持LIMIT子句来选择有限数量的记录,而Oracle使用…...
vue3-admin-element框架登录如何修改?
1、找到vite.config.js文件 配置反向代理 2、找到src文件下的user.js文件 3、找到views文件下的login文件 打开找到comp文件夹找到LoginFrom.vue页面进去 把这个改成自己的账户数据(密码不一致自行更改) 4、找到store文件下的modules下的user.js 5、找到…...
基于mysql的请假系统,java/springboot/jsp/javaweb/tomcat
系统分为 学生/辅导员/超级管理员 登录注册、修改头像、个人资料。 学生登录可以提交请假申请。 辅导员登录可以管理学生信息、管理班级信息、管理课程信息。 超级管理员登陆可以管理用户信息、管理学生信息、管理辅导员信息、管理班级信息、管理二级学院信息、管理课程信息、…...
【Python机器学习】零基础掌握partial_dependence检验、检查
在医疗健康的领域,有一个问题一直困扰着专家——如何从多个健康指标中找出影响患者健康最关键的因素?在这样的场景下,做出准确的预测非常关键,因为它直接关联到患者的生命安全。 解决这一问题的一个有效方法是利用机器学习算法,具体来说就是通过偏依赖图(Partial Depend…...
前端Vue页面中如何展示本地图片
<el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"imgUrl" label"图片"><template v-slot"scope"><img :src "http://localhost:8888/image/ scope.row.imgUrl&qu…...
基于PHP的图像分享社交平台
有需要请加文章底部Q哦 可远程调试 基于PHP的图像分享社交平台 一 介绍 此图像分享社交平台基于原生PHP开发,数据库mysql,前端bootstrap。平台角色分为用户和管理员。用户可注册登录,发布图像,修改个人信息,评论图像…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
