Vue打包优化篇-CDN加速

article/2025/9/3 7:59:59

优化原因

在没有使用cdn加速之前打包后数据如下,可以看出element-ui、vue、vuex、vue-router这些依赖都打进chunk-vendors.js中导致体积很大,假设再来很多依赖项是不是更大,同时也会影响单页面应用首屏加载速度,所以这里采用一种打包优化手段之一来分离依赖项。

在这里插入图片描述

查看依赖版本

首先项目中需要使用依赖项,我这里项目中打算将element-ui、vue、vuex、vue-router这些依赖项进行分离,记录依赖版本方便后面使用。

依赖名称依赖版本
vue2.6.11
vue-router3.2.0
vuex3.4.0
element-ui2.15.9

在这里插入图片描述

查看依赖引用

在main.js中可以看到这些依赖被引用。
在项目中开发环境和生成环境一些配置是不同的,所以这里截图方便后面理解。

在这里插入图片描述

配置开发环境和生产环境

在上面我们已经看到main.js中如何引用依赖,现在我们需要做一些改动在main.js改为main-dev.js作为我们的开发环境,然后在同级目录下创建一个新的文件叫main-prod.js作为我们的生产环境,实际开发中开发环境(main-dev.js)和生产环境(main-prod.js)配置存在不同。

开发环境入口 - main-dev.js

在这里插入图片描述

// 这是给ElementUI组件库组件设置默认参数
Vue.use(ElementUI, { size: 'small', zIndex: 3000 });

生产环境入口 - main-prod.js

在这里插入图片描述

// 这是给ElementUI组件库组件设置默认参数(cdn加速和生产环境配置有区别)
Vue.prototype.$ELEMENT = {size: 'small',zIndex: 3000
};

配置开发环境入口和生产环境入口

这里需要注意一下的是配置入口,因为默认入口文件只有一个main.js但是你给改成了main-dev.js而且还新增了一个main-prod.js,然后你运行项目或打包项目肯定报错,因为它去找main.js找不到啊,所以这里需要通过vue.config.js文件来指定生产环境和开发环境入口。

vue.config.js

// 判断是否是生产环境
const isProduction = process.env.NODE_ENV !== 'development';module.exports = {publicPath: './', // 不加这个可能会导致静态资源找不到的情况。chainWebpack: config => {config.when(isProduction, config => {// 如果是生产环境,那么将main-prod.js作为入口文件(我这里是ts和js一样)。config.entry('app').clear().add('./src/main-prod.ts');});config.when(!isProduction, config => {// 如果是不是生产环境,那么将main-dev.js作为入口文件(我这里是ts和js一样).config.entry('app').clear().add('./src/main-dev.ts');});}
};

在这里插入图片描述

配置CDN加速

完成上面环境配置已经成功一半啦,接下来就需要配置cdn加速相关的啦。

vue.config.js

这里需要说明一下,看下面的cdn加速链接中依赖的版本和上面查看依赖版本表格展示是不是一样的?肯定要一样啊不然出现依赖版本冲突问题怎么办。
关于externals属性告诉webpack需要排除的依赖名称和挂载在window上的对象属性名称,这里简单列出常用的表,如需要其它的可以插件依赖导出到window的对象名称,也可以面向百度查找对应的对象属性名称。

依赖名称挂载在window上的对象属性名称
vueVue
vue-routerVueRouter
vuexVuex
lodash_
element-uiELEMENT

const isProduction = process.env.NODE_ENV !== 'development';const cdn = {externals: {vue: 'Vue','vue-router': 'VueRouter',vuex: 'Vuex',"element-ui": "ELEMENT"},css: ['https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.9/theme-chalk/index.min.css',],js: ['https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js','https://cdn.jsdelivr.net/npm/vue-router@3.2.0/dist/vue-router.min.js','https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js','https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.9/index.min.js']
};module.exports = {publicPath: './',chainWebpack: config => {config.when(isProduction, config => {config.entry('app').clear().add('./src/main-prod.ts');// 我们希望的是在生产环境下才进行cdn优化!!!这点理解很重要。// 告诉webpack需要排除的依赖名称和挂载在window上的对象属性名称。config.set('externals', cdn.externals);// 这里的作用是在后面index.html页面中通过link,script标签加载这些cdn链接。config.plugin('html').tap(args => {args[0].cdn = cdn;return args;});});config.when(!isProduction, config => {config.entry('app').clear().add('./src/main-dev.ts');});}
};

在这里插入图片描述

index.html

这里也需要说明一下,这个index.html页面的位置一般在public目录下。
下面的htmlWebpackPlugin.options.cdn对象是不是很眼熟,不就是我们通过vue.config.js中生产环境配置config.plugin(‘html’)加入的属性?真是一环扣一环呐。

<!DOCTYPE html>
<html lang="zh"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><title><%= htmlWebpackPlugin.options.title %></title><!-- 这里从cdn配置里面加载css文件 --><% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %><link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" /><link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" /><% } %><!-- 这里从cdn配置里面加载js文件 --><% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %><link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="preload" as="script" /><% } %></head><body><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.Please enable it to continue.</strong></noscript><div id="app"></div><!-- built files will be auto injected --><!-- 这里从cdn配置里面加载js文件 --><% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %><script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script><% } %></body></html>

打包测试

完成以上步骤后,cdn打包优化就完成啦,现在运行打包测试一下。
下面打包数据和没有cdn优化的打包数据对比一下,是不是依赖项排除了?打包时间也变快了。
面试的时候是不是又多了一些底气了?

在这里插入图片描述


http://chatgpt.dhexx.cn/article/n9984eNb.shtml

相关文章

vue打包后dist的使用

发现问题 vue项目完成打包出dist后准备打开index.html&#xff0c;发现居然页面是一片空白&#xff0c;f12一片报红。 分析问题 经过多次网上查询后发现这是由于vue打包时&#xff0c;脚手架会帮你配置好大量参数&#xff0c;但其中路径publicPath被配置为了"/",需…

vue打包的文件加上版本号

为什么要加版本号&#xff1f;因为有时候打包文件部署上线后发现线上没更新&#xff0c;原因是因为线上环境有缓存&#xff0c;故加上版本号可解决此问题&#xff01; 在vue.config.js配置&#xff1a; 输出文件名js文件增加版本号&#xff1a; output: {filename: js/[name]…

解决vue打包后去掉console

方法一&#xff1a;使用插件 babel-plugin-transform-remove-console npm install babel-plugin-transform-remove-console --save-dev 安装插件生产环境&#xff1a;在项目的babel.config.js的plugin中添加节点。 let transformRemoveConsolePlugin [];if (process.env.N…

Vue打包路径配置

1. 配置文件 module.exports {// ......// 相对路径都是相对于index.js所在的目录config开始的build: {// index,assetsRoot两个路径基本不用改动&#xff0c;只是用于文件打包存放的路径// index.html的路径index: path.resolve(__dirname, ../dist/index.html),// js,css,f…

Vue打包并发布项目

一、 打包vue项目步骤&#xff1a; 1、对当前vue项目进行打包的命令如下&#xff1a; npm run build2、打包完成&#xff0c;会输出Build complete并且在vue项目中会生成一个名字为dist的打包文件。如下图&#xff1a; 二、 使用静态服务器工具包发布打包的vue项目 1、首先…

vue打包后static中的文件未打包进去

在vue中未使用到的静态资源文件&#xff0c;例如&#xff1a;引用在index.html的js的&#xff08;此处不知为何&#xff0c;vue打包认为其为未引用&#xff09;&#xff0c;后端返回才引用到的图片等文件。 目前只涉及到此两类&#xff0c;后续再补充。 打包时static中的文件…

vue打包上线相关配置

1、打包&#xff1a; npm run build项目打包后&#xff0c;代码都是经过压缩加密的&#xff0c;如果运行时报错&#xff0c;错误信息无法得知是哪里报错 有了 map 文件就可以像未加密的代码一样&#xff0c;准确的输出哪一行那一列有错。 一般情况下时不需要保留的 在 vue.con…

vue打包nginx部署

描述&#xff1a;从未部署的vue项目&#xff0c;开始准备了tomcat和nginx&#xff0c;最后发现nginx比较方便&#xff0c;nginx部署的话只准备nginx就可以了。 nginx部署过程&#xff1a; 1、下载nginx的压缩包&#xff0c;直接解压到目的路径就可以。 2、将vue项目打包后的…

Vue打包时指定配置文件

vue工程的配置文件一般放在vue.config.js中&#xff0c;但是有时我们有自己的配置文件&#xff0c;需要在打包时动态切换&#xff0c;可在打包时动态指定node环境变量"process.env.NODE_ENV"切换。 1、新增不同环境的配置文件 2、export指定的配置文件 import devC…

vue 打包时图片压缩

1、image-webpack-loader 是依赖于 imagemin-pngquant&#xff0c;则必须要按顺序安装 npm install imagemin-pngquant --save-dev npm install image-webpack-loader --save-dev2、安装 compression-webpack-plugin 如果安装太高的版本&#xff0c;则会报错 可安装 下面的版…

VUE打包详细步骤

一、vue2 1.修改请求静态资源的路径 打开config文件夹下的index.js文件&#xff0c;修改assetsPublicPath的值&#xff0c;从"/“改为”./"。即从根路径改为相对路径。 assetsPublicPath&#xff1a;./2、修改本地图片的路径 打开build下的utils.js文件&#xff0c…

VUE打包目录自定义

新接手VUE项目&#xff0c;因为项目需要&#xff0c;我们要按照之前的项目结构打包&#xff0c;VUE自动生成的打包目录结构不符合要求。 1.dist目录不能用&#xff0c;导致每次打包需要将dist文件夹重新命名&#xff0c;如果要修改打包后文件的目录&#xff0c;需要修改“conf…

vue打包路径设置

vue 打包路径设置 vue打包默认路径css中图片路径等线上不显示工程源码 vue打包默认路径 1.vue打包之后的默认路径是从根目录开始算的&#xff0c;如果你的项目并不是根目录&#xff0c;而是子目录&#xff0c;这种设置就会导致路径错误&#xff0c; 解决方法&#xff1a;修改c…

Vue项目打包部署

前几天看[小猪课堂发布的nginx部署](https://zhuanlan.zhihu.com/p/431796992)&#xff0c;跟着做了一遍&#xff0c;由于本人是第一次尝试&#xff0c;遇见了很多问题。经过查阅和搜索&#xff0c;终于解决掉了。下面给大家介绍一下我的流程和遇见的问题&#xff0c;我们可以多…

Vue中如何进行打包与部署?

Vue中如何进行打包与部署&#xff1f; Vue是一款流行的JavaScript框架&#xff0c;它提供了丰富的功能和组件&#xff0c;可以用于构建现代化的Web应用程序。在开发Vue应用程序时&#xff0c;我们通常需要进行打包和部署。本文将介绍Vue中的打包和部署&#xff0c;包括使用Web…

vue 打包的方式

我是一个苦b的程序员&#xff0c;今晚加班到快通宵了&#xff0c;困得快睁不开眼了&#xff0c;女上司很关心&#xff0c;问我要不要吃宵夜。我没好气地说&#xff0c;宵夜就算了&#xff0c;能让我睡一觉就行了。女上司红着脸说了句讨厌啊&#xff0c;然后坐在我身边不动&…

vue项目打包流程

vue项目打包流程 二、打包优化 1.首先在根目录下面创建一个vue.config.js文件 2.去除.map文件&#xff0c;在vue.config.js文件里面抛出一个对象&#xff0c;然后把下面两段代码写到对象里面&#xff0c;然后在控制台或者终端通过npm run build命令&#xff0c;打包项目 注…

mybatis嵌套循环map(高级用法)

前言&#xff1a; mybatis有默认的list&#xff0c;array&#xff0c;但是没有默认的map。所以不能直接写collection"map"&#xff0c;如果这么写&#xff0c;它会当成是根据map.get(“map”)来取value值&#xff0c;大部分情况下是一个map中是不会有“map”这个key的…

mybatis中循环map集合操作

首先声明一个MAP集合&#xff0c;用来存放数据&#xff1a;如下图&#xff1a;声明map集合pd&#xff0c;将数据put到pd中&#xff0c;然后在声明一个map集合params&#xff0c;将pd几个放入params集合中&#xff0c;将params作为参数&#xff0c;参入xml配置文件中&#xff1a…

IDEA循环MAP的快捷键和自己常用的循环MAP方式

IDEA循环Map的快捷方式&#xff0c; IDEA 快捷键 map.keySet().iter 循环输出Map的key键 IDEA 快捷键 map.values().iter 循环输出Map的key的value值 // 循环map for (String s : map.keySet()) { // 输出map中key System.out.println(s); // 获取map中key的value map.get…