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

news2025/1/12 12:24:58

❤ 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.coloradmin.cn/o/1811105.html

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

相关文章

知识图谱的应用---社交网络

文章目录 社交网络典型应用 社交网络 社交网络已成为发展最快的互联网应用&#xff0c;社交网络用户不仅仅是信息的接受者&#xff0c;也成为了信息的制造、加工和传播者&#xff0c;通过关注、被关注的方式形成了一张张庞杂繁复的用户关系网。随着社交网络中用户及信息急速增长…

数新网络签单国泰君安:利用数据服务平台提升金融业务用数能力

近日&#xff0c;数新网络与国泰君安证券股份有限公司&#xff08;以下简称“国泰君安”&#xff09;达成了数据服务平台升级项目的签约。这一项目的推进将更好地服务于国泰君安内部业务部门的数据需求&#xff0c;帮助数据平台更加有效地实现提升业务响应效率的目标&#xff0…

【Linux文件篇】系统文件、文件描述符与重定向的实用指南

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;相信大家对文件都不会太陌生、也不会太熟悉。在没有学习Linux操作系统时&#xff0c;我们在学习C或C时都学过如何去创建、打开、读写等待文件的操作&#xff0c;知道一些语言级别的一些接口与函数。但…

怎样把便签里的内容移到桌面?桌面便签软件使用方法

每次打开电脑&#xff0c;我总是被满屏的文件和图标弄得眼花缭乱。那些记录在各式各样便签里的重要事项&#xff0c;经常被埋没在这信息的海洋中&#xff0c;找起来真是头疼。想必很多人都有过这样的困扰&#xff1a;如何在繁杂的桌面环境中&#xff0c;一眼就看到自己需要提醒…

问题:以下被纳入代理资产风险分类管理的业务包括() #媒体#知识分享

问题&#xff1a;以下被纳入代理资产风险分类管理的业务包括&#xff08;&#xff09; A&#xff0e;非标准化理财投资业务 B&#xff0e;特定债权投资业务 C&#xff0e;委托债权代理业务 D&#xff0e;非标准化代理销售业务 参考答案如图所示

HTML静态网页成品作业(HTML+CSS)—— 兰蔻化妆品网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

NAT

文章目录 1.NAT是什么2.NAT功能3.NAT优缺点4.NAT作用工作原理5.NAT 静态 动态5.1静态静态配置1.全局模式下设置静态NAT2.接口上设置静态NAT 5.2动态动态配置测试 6.PAT多路复用 PAT NAPT Easyip NAT server6.1PAT端口多路复用PAT作用 1.NAPT配置测试 2.EasyIp配置测试 3.NAT se…

Fegin如何传参form-data文件

Form-data传输file参数&#xff0c;这个大家都比较清楚&#xff0c;那么针对于Fegin参数file参数该如何操作呢&#xff01;下面截图来找到对应的参数关系。 一、之前我们在postMan中是这种传参的&#xff0c;那么如果使用Feigin来传输文件File 二、在Fegin中传form-data参数&a…

Qt系统相关

本文目录 1.Qt事件事件的处理标签事件鼠标事件滚轮事件按键事件定时器事件窗口事件事件派发器 2.Qt文件操作QFile的基本使用 3.Qt多线程使用线程线程锁connect的第五个参数 条件变量和信号量 4.Qt网络编程UDP SocketTCP SocketQTcpServerQTcpSocket HTTP的编写 5.QT多媒体播放音…

【区块链】深入解析Proof of Work (PoW): 区块链技术的核心驱动力

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入解析 Proof of Work (PoW): 区块链技术的核心驱动力引言一、PoW基本概念1.1…

UNetMultiLane 多车道线、车道线类型识别

基于UNet 分割模型增加了检测头来识别车道线的类型&#xff08;单实线、双黄线等10种&#xff09;&#xff0c;同时可以识别出"所在车道"和"车道线类型"。 训练代码【训练练手代码】 1 数据说明 基于开源数据集 VIL100。其中数据标注了所在的六个车道的车…

大福利!微信付费进群源码

微信付费进群源码 前言效果图搭建教程源码领取下期更新预报 前言 1、修复SQL表 2、修复支付文件 3、修复支付图标不显示 4、修复定位、分销逻辑、抽成逻辑 5、新增支持源支付、易支付的支付接口 6、修复官方微信、支付宝支付接口文件 本来早就可以完工的&#xff0c;电脑…

苹果WWDC 2024速览

引言 2024年苹果全球开发者大会&#xff08;WWDC&#xff09;在充满科技感的苹果园区拉开帷幕&#xff0c;本次大会发布了众多令人振奋的软硬件更新&#xff0c;包括Vision OS 2、iOS 18、watchOS 11和macOS Sequoia的重大创新。本文将详细解读这些更新&#xff0c;为您展示它…

来自中国信通院的认可!上海斯歌受邀加入“EP-Link 智能流程推进计划”

5月30日&#xff0c;由中国信息通信研究院主办的“EP-Link 智能流程推进计划”周年产业研讨会在北京隆重召开。会上&#xff0c;在众多领袖专家、行业翘楚的见证下&#xff0c;上海斯歌被中国信息通信研究院授予“EP-Link 智能流程推进计划”成员单位证书&#xff0c;正式加入该…

Vxe UI vxe-modal 实现窗口的最大化与最小化,实现弹出多窗口

Vxe UI vue vxe-modal 实现窗口的最大化与最小化&#xff0c;实现弹出多窗口 通过js方式调用 js方式脱离模板&#xff0c;每次创建是多个实例。 mask&#xff1a;关闭遮罩层&#xff0c;如果不关闭则会显示遮罩层&#xff0c;就不能实现同时操作多窗口 lockView&#xff1a;…

IDA反调试、反汇编解决方案

IDA全称为Interactive Disassembler Professional&#xff0c;是一款交互式静态反汇编工具&#xff0c;它可以直接反汇编出二进制文件的汇编代码&#xff0c;是逆向分析领域最强大的工具之一。 IDA支持Windows、Linux等多平台与数十种指令集&#xff0c;凭借着泛用性与友好的图…

弘君资本股市资讯:突发!英伟达,被查!

4家科技巨擘一同被查&#xff01; 科技巨擘们&#xff0c;正迎来反独占风暴。据美媒报道&#xff0c;美国将对英伟达、微软、OpenAI翻开反独占查询&#xff0c;这标志着监管部门对人工智能工作的查看力度越来越大。 与此一同&#xff0c;苹果也面对新费事。6月6日&#xff0c…

机器学习-- 如何清洗数据集

文章目录 引言&#xff1a;数据清洗的具体步骤数据清洗的具体方法和示例1. 处理缺失值2. 去除重复数据3. 修正数据格式4. 处理异常值5. 标准化和归一化6. 处理不一致的数据7. 转换数据类型8. 数据集成 总结 引言&#xff1a; 数据清洗是数据处理和分析的关键步骤&#xff0c;旨…

如何预览XtraGrid控件

如何预览XtraGrid。 private void ShowGridPreview(DevExpress.XtraGrid.GridControl grid) {// Check whether the Grid Control can be previewed.if(!grid.IsPrintingAvailable) {MessageBox.Show("The DevExpress.XtraPrinting Library is not found", "Er…

linux-ubuntu20网卡驱动安装AX201

https://blog.csdn.net/vor234/article/details/131682778 联想拯救者Y7000P2023 Ubuntu20.04网卡驱动AX211安装 幻14 ubuntu20.04 AX210驱动安装 官网下载相应的驱动&#xff1a;https://www.intel.com/content/www/us/en/support/articles/000005511/wireless.html sudo a…