❤vue2项目webpack打包的优化策略

❤ vue2项目webpack打包的优化策略

(优化前)

现在我们的打包时间为:
在这里插入图片描述>打包体积大小为:
在这里插入图片描述

1、去除开发环境和生产环境提示以及日志

开发环境和生产环境的打印处理

生产环境去除console.log打印的两种方式

通过环境变量控制console.log的打印,具体操作如下:

第一种

1、根目录 .env.xxx文件中写入NODE_ENV参数
在这里插入图片描述

2、在main.js里面加上下列语句:

if (process.env.NODE_ENV === 'production') {console.log = () => {}console.warn = () => {}
}

以上完成了配置

第二种

在babel.config.js 文件中进行修改

1、需下载这个包transform-remove-console
```js
npm install babel-plugin-transform-remove-console --save-dev

2、在babel.config.js可如下写


// babel.config.js
// 生产环境移除console
const remPlugins = []
if (process.env.NODE_ENV === 'production') {remPlugins.push('transform-remove-console')
}module.exports = {"plugins":[...remPlugins ]
};

根据当前的开发模式或打包模式来使用不同的入口文件

module.exports = {chainWebpack: config => {// 打包模式config.when(process.env.NODE_ENV === 'production', config => {config.entry('app').clear().add('./src/main-prod.js')})// 开发模式config.when(process.env.NODE_ENV === 'development', config => {config.entry('app').clear().add('./src/main-dev.js')})}
}

2、 build后不可查看源码

不设置的情况下,打包上线,可在 f12 -> sources -> webpack:// 下查看到项目源码

在这里插入图片描述
在vue.config.js中配置

const isProduction = process.env.NODE_ENV === 'production'
module.exports = {productionSourceMap: false,configureWebpack: {devtool: isProduction ? false : "source-map",}
}

3、解决每次发版都要强刷清除浏览器缓存

原理
将打包后的js和css文件,加上打包时的时间戳

1 index.html
在 public 目录下的index.html文件里添加如下代码

<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="expires" content="0">

vue.config.js

let timeStamp = new Date().getTime();
module.exports = {publicPath: "./",filenameHashing: false,// 打包配置configureWebpack: {output: { // 输出重构 打包编译后的js文件名称,添加时间戳.filename: `js/js[name].${timeStamp}.js`,chunkFilename: `js/chunk.[id].${timeStamp}.js`,}},css: {extract: { // 打包后css文件名称添加时间戳filename: `css/[name].${timeStamp}.css`,chunkFilename: `css/chunk.[id].${timeStamp}.css`,}}
};

4、配置Vue2项目打包优化命令行(Tree-shaking)

Tree-shaking 是一种通过静态分析代码来检测未使用部分的技术

(1)添加–report命令:“build”: “vue-cli-service build --report”,打包后 dist 目录会生成 report.html 文件,用来分析各文件的大小
在这里插入图片描述

打开以后如图所示
在这里插入图片描述

5、配置V2打包优化对比工具webpack-bundle-analyzer ((Tree-shaking))

webpack有一种可视化的打包分析工具:webpack-bundle-analyzer ,在vue.config.js中引入,代码如下:npm run build的时候会出现打包分析图

npm install webpack-bundle-analyzer -D
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;module.exports = {
configureWebpack: {plugins: [new BundleAnalyzerPlugin()]}        
}

6、externals 提取公共依赖包

在我打包之前项目体积如图
在这里插入图片描述
vue.config.js 中配置

configureWebpack: {name: name,resolve: {alias: {'@': resolve('src')}},externals: {vue: 'Vue','vue-router': 'VueRouter',axios: 'axios',echarts: 'echarts'},// 打包插件// plugins: [newBundleAnalyzerPlugin],},

在 index.html 中使用 CDN 引入依赖


vue
<script type="text/javascript" src="https://lib.baomitu.com/vue/2.6.10/vue.min.js"></script>vue-router<script type="text/javascript" src="https://lib.baomitu.com/vue-router/3.0.2/vue-router.min.js"></script>axios   <script type="text/javascript" src="https://lib.baomitu.com/axios/0.18.1/axios.min.js"></script>echarts
<script type="text/javascript" src="https://lib.baomitu.com/echarts/4.7.0/echarts.min.js"></script>

配置后如图
在这里插入图片描述

7、babel-plugin-component(未使用)

通过该插件,最终只引入指定组件和样式,来实现减少组件库体积大小

// 安装
npm install babel-plugin-component -D

babel.config.js中引入

plugins: ['component',{'libraryName': 'element-ui','styleLibraryName': 'theme-chalk',}],

8、使用 moment-locales-webpack-plugin插件,剔除掉无用的语言包

安装
npm install moment-locales-webpack-plugin -D

vue.config.js 中引入

constMomentLocalesPlugin = require( 'moment-locales-webpack-plugin');
module.exports = {
configureWebpack: {plugins: [newMomentLocalesPlugin({ localesToKeep: [ 'zh-cn']})]
}
}

9、HappyPack 多线程打包(提升打包速度)

由于运行在 Node.js 之上的 webpack 是单线程模型的,我们需要 webpack 能同一时间处理多个任务,发挥多核 CPU 电脑的威力

HappyPack就能实现多线程打包,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程,来提升打包速度

vue2

安装
npm install happypack -D//vue.config.js中进行配置//顶部引入
const HappyPack = require('happypack');
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
const os = require('os');chainWebpack(config){config.plugin('happypack').use(HappyPack).tap(options=>{options[0]={id:'babel',loaders:['babel-loader?cacheDirectory=true'],threadPool: happyThreadPool}return options})const hRule = config.module.rule('js')hRule.test(/\.js$/).include.add(resolve('src')).end()hRule.uses.clear()hRule.use('happypack/loader?id=babel').loader('happypack/loader?id=babel').end()
}
安装
npm install happypack -D

vue.config.js 中引入

constHappyPack = require( 'happypack');
constos = require( 'os');
consthappyThreadPool = HappyPack.ThreadPool({ size: os.cpus.length });

10、Gzip压缩

安装
npm install compression-webpack-plugin -D

vue.config.js 中引入

// 引入
const CompressionPlugin = require( 'compression-webpack-plugin');//使用configureWebpack: { // 打包插件plugins:[new CompressionPlugin({test: /\.(js|css)(\?.*)?$/i, //需要压缩的文件正则threshold: 1024, //文件大小大于这个值时启用压缩deleteOriginalAssets: false//压缩后保留原文件})],
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终成大流:CDM+AI彻底重塑数据备份市场

进入2024年&#xff0c;CDM市场又迎来高光时刻。 先有Cohesity上演“蛇吞象”并购Veritas数据备份与数据管理业务&#xff0c;并在新一轮融资中获得IBM、NVIDIA两大巨头的战略投资&#xff1b;后有Rubrik获得资本市场认可&#xff0c;以64亿美元市值成功登陆纽交所。两大CDM明…

[Unity学习] 背景视差因子计算,远近背景移动距离差

public Camera cam;public Transform trans;Vector2 startPosiotion;float startZ;//此物距离trans的z距离private float zDistance > transform.position.z - trans.transform.position.z;void Start(){startPosiotion transform.position;startZ transform.position.z;}…

免费!快速!干货!手把手教你如何在个人电脑上搭建你自己的大模型服务!

大模型发展如火如荼&#xff0c;虽然大模型的能力强大&#xff0c;但是大模型也是非常昂贵的&#xff01;不管是训练还是推理&#xff0c;都需要耗费大量的机器&#xff0c;而且机器的硬件资源&#xff0c;比如GPU、TPU等都有一定的要求。 因此&#xff0c;业界的同行们&#x…

docker——环境搭建

准备知识 一、Docker官方架构 ​ docker使用C/S架构模式&#xff1b; ​ Docker 仓库(Registry) ​ Docker 仓库用来保存镜像&#xff0c;可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。 ​ Docker daemon ​ Docker daemon 是服务器组件&#…

Lua搭建网站后台教程

本文讲解如何使用二进制发布包和FastWeb网站管理工具搭建站点 FastWeb网站管理工具 使用该工具可快速在Windows平台部署。支持官方或三方模块的自动安装、日志调试、版本更新等。 1、下载最新版本压缩包 2、解压到任意目录(建议英文) 3、运行 ①点击 [设置]->[安装] 部…

DEV-C++小游戏吃星星(1.5)

吃星星1.5版导航 ★★★★★ 吃星星&#xff08;1.5&#xff09;★★★★★ ★★★★该版本简介更新说明★★★★ ★★★分部代码★★★ ★头文件命名空间变量★ ★★结构体★★ ★辅助结构体★ ★角色结构体★ ★星星结构体★ ★打印结构体★ ★加载中结构体★ ★游…

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia-boot-iso/&#xff0c;查看最新版…

[手游] 三色绘恋S Mobile Link

语音合成TTS: 文字转成语音的工具 WPS免登录一键修改器: 去除烦人的登录且能正常使用 故事简介&#xff1a; 深秋的雨季即将到来&#xff0c;正值那个为人所熟知的故事发生的前一年—— 地点&#xff1a;湖北省的重点高中&#xff0c;武汉师贰高校。 新学年开始&#xff0c;各…

LeetCode | 2879.显示前三行

在 pandas 中&#xff0c;可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行&#xff0c;可以在 head() 方法中传入一个参数 n&#xff0c;读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

前沿重器[49] | 聊聊搜索系统2:常见架构

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

分布式高性能计算 (HPC)的工作负载管理平台和作业调度程序—— IBM Spectrum® LSF® Suites

IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM Spectrum LSF 的集群供应和配置资源。 借助我们针对任务关键型 HPC 环境的集成解决方案&#xff0…

弘君资本股市资讯:增逾20倍!百亿细分龙头利好来了

5月以来&#xff0c;A股进入了时间短的成绩发表空档期&#xff0c;而百亿化工细分龙头齐翔腾达&#xff0c;则以一份高增的成绩预告&#xff0c;摆开半年报成绩预告发表序幕。 6月10日晚间&#xff0c;齐翔腾达发表的成绩预告显现&#xff0c;上半年估计完成归母净赢利1.3亿元…

神经网络 torch.nn---Pooling layers(nn.MaxPool2d)

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn.MaxPool2d class torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse) 参数介绍 kernel_size(int or tuple) - …

AI机器人公众号小程序h5源码开源交付支持二开黑色风格版本

AI机器人系统对接OPENAI&#xff1a;开启智能新纪元 更新全新UI、新增全家桶模块、新增热榜板块、支持语音朗读、支持快速回答、支持AI绘图、支持文字一键生成图、支持导出pdf、支持导出word、支持导出文字、支持快速响应、支持中英翻译、支持markdown &#x1f680;一、引言…

还在为复制粘贴烦恼吗?这5个工具帮你轻松搞定

在日常工作中&#xff0c;CtrlC和CtrlV无疑是我们使用最为频繁的快捷键组合。 复制粘贴&#xff0c;轻松快捷。 但是在使用中&#xff0c;也会有一点不便&#xff0c;那就是无法保存剪贴历史内容。 比如我说复制之后&#xff0c;我想要想要找回这一次复制之前的内容&#xf…

不要使用业务键作为数据库主键

Mark Seemann这篇博客文章反对使用自然键作为数据库表中的主键&#xff0c;而是建议始终使用合成&#xff08;人工&#xff09;键。 什么是自然键 自然键&#xff08;也称为业务键或领域键 &#xff09;是数据库中一种唯一键&#xff0c;由存在并在数据库外部世界&#xff08;…

调用华为云实现人证核身证件版(二要素)

目录 1.作者介绍2.华为云人证核身2.1什么是人证核身2.2应用场景2.3限制要求 3.流程介绍3.1调用API实现3.2调用SDK实现 1.作者介绍 高凡平&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究方向&#xff1a;数码印花缺陷检测 电子邮件&#xf…

下载NVIDIA官网的培训视频,生成中文字幕和PPT

下载NVIDIA官网的培训视频,生成中文字幕和PPT 一.[视频网站](https://www.nvidia.cn/on-demand/session/gtc24-s62129/)二.如何获取视频的原始链接三.下载视频的脚本【生成output.mp4】四.安装whisper环境【语音识别生成英文字幕】五.下载whisper模型六.生成英文字幕【输出merg…

最好用的搜题软件大学?8个公众号和软件推荐清单! #知识分享#知识分享#经验分享

今天&#xff0c;我将分享一些受欢迎的、被大学生广泛使用的日常学习工具&#xff0c;希望能给你的学习生活带来一些便利和启发。 1.彩虹搜题 这个是公众号 一款专供大学生使用的搜题神器专注于大学生校内学习和考研/公考等能力提升 下方附上一些测试的试题及答案 1、行大量…

版图快捷键

Ctrlf版图都不显示 Shiftf显示正常图层版图 顶层版图选中某一个block后&#xff0c;Shiftx进入下一层版图和对应的SCH&#xff0c;Shiftb返回上一层