vue项目优化与上线
一.项目优化策略
1.生成打包报告
2.第三方库启用CDN
3.Element-ui组件按需加载
4.首页内容定制
5.路由懒加载
1.生成打包报告
1.1通过vue-cli的UI面板直接查看
1.2通过命令行参数生成报告
// 生成report.html分析报告
vue-cli-service build --report
2.修改webpack配置
如果有修改webpack默认配置的需求,可以在项目根目录创建vue.config.js配置文件
2.1为开发模式与发布模式指定不同的打包入口
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.2通过externals加载外部CDN资源
默认情况下,通过import导入的第三方依赖包最终会被打包合并到一个文件中,导致打包后单文件体积过大。所以我们需要通过webpack的externals节点,配置加载外部CDN资源,凡是声明在externals中的第三方依赖包都不会被打包。
配置vue.config.js文件
module.exports = {
chainWebpack: config => {
// 指定发布模式打包入口
config.when(process.env.NODE_ENV === 'production', config => {
config
.entry('app')
.clear()
.add('./src/main-prod.js') // 使用externals加载外部CDN资源
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
lodash: '_',
echarts: 'echarts',
nprogress: 'NProgress',
'vue-quill-editor': 'VueQuillEditor'
})
}) // 指定开发模式打包入口
config.when(process.env.NODE_ENV === 'development', config => {
config
.entry('app')
.clear()
.add('./src/main-dev.js')
})
}
}在public/index.html文件头部,添加第三方依赖包的js和css样式的CDN引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNWKI4Ry-1604394495531)(https://s1.ax1x.com/2020/11/03/Bsfrcj.png)]
3.通过CDN加载element-ui的组件
在main-prod.js中,注释掉element-ui按需加载的代码
// import './plugins/element.js'
在index.html头部,通过CDN加载element-ui的js和css

4.首页内容定制(看需求决定用不用)
不同打包环境下,首页内容页可能不同,可以通过插件进行配置
配置vue.config.js文件
module.exports = {
chainWebpack: config => {
// 指定发布模式打包入口
config.when(process.env.NODE_ENV === 'production', config => {
config
.entry('app')
.clear()
.add('./src/main-prod.js') // 使用externals加载外部CDN资源
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
lodash: '_',
echarts: 'echarts',
nprogress: 'NProgress',
'vue-quill-editor': 'VueQuillEditor'
}) config.plugin('html').tap(args => {
args[0].isProd = true
return args
})
}) // 指定开发模式打包入口
config.when(process.env.NODE_ENV === 'development', config => {
config
.entry('app')
.clear()
.add('./src/main-dev.js') config.plugin('html').tap(args => {
args[0].isProd = false
return args
})
})
}
}
在public/index.html中,根据isProd的值,决定如何渲染页面结构
<!- 按需渲染页面标题 -->
<title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>标题</title> <!- 按需加载外部CDN -->
<% if(htmlWebpackPlugin.options.isProd){ %>
<!- 通过externals加载的外部CDN资源 -->
<% } %>
5.路由懒加载
当打包构建项目时,JavaScriot包会变得非常大,影响页面加载。所以我们将不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应组件。
安装插件包
开发依赖 @babel/plugin-syntax-dynamic-import
在babel.config.js中的plugins声明该插件
'@babel/plugin-syntax-dynamic-import'
将路由改为按需加载的形式
const Foo = () => import(/* webpackChunkName: "grounp-foo" */ './Foo.vue')
const Bar = () => import(/* webpackChunkName: "grounp-foo" */ './Bar.vue')
const Baz = () => import(/* webpackChunkName: "grounp-boo" */ './Baz.vue')
二.项目上线配置
1.通过node创建web服务器
2.开启gzip配置
3.配置https服务
4.使用pm2管理应用
1.通过node创建web服务器
创建node项目,并安装express,通过express快速创建web服务器,将vue打包生成的dist文件夹托管为静态资源即可。
npm init -y
npm i express -S
// 新建app.js
const express = require('express')
const app = express()
app.use(express.static('./dist'))
app.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
2.开启gzip配置
使用gzip可以减小文件体积,传输速度更快。
npm install compression -D
const compression = require('compression')
app.use(compression())
const express = require('express')
const compression = require('compression')
const app = express()
// 一定要把这一行代码,写到 静态资源托管之前
app.use(compression())
app.use(express.static('./dist'))
app.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
3.配置HTTPS服务(一般后端去做,了解即可)
传统的http都是明文,不安全,所以使用https进行加密处理,防止数据窃取
1. 申请SSL证书
2. 证书导入
const https = require('https')
const fs = require('fs')
const options = {
cert: fs.readFileSync('./full_chain.pem'),
key: fs.readFileSync('./private.key')
}
https.createServer(options, app).listen(443)
const express = require('express')
const compression = require('compression')
const https = require('https')
const fs = require('fs')
const app = express()
const options = {
cert: fs.readFileSync('./full_chain.pem'),
key: fs.readFileSync('./private.key')
}
// 一定要把这一行代码,写到 静态资源托管之前
app.use(compression())
app.use(express.static('./dist'))
// http服务
// app.listen(80, () => {
// console.log('server running at http://127.0.0.1')
// })
// https服务
https.createServer(options, app).listen(443)
4.使用pm2管理应用
终端窗口使用node开启服务后,不能关闭。所以使用pm2管理应用,解放终端窗口。
pm2使用:
启动项目:pm2 start脚本 --name自定义名称
查看运行项目:pm2 ls
重启项目:pm2 restart 自定义名称
停止项目:pm2 stop 自定义名称
删除项目:pm2 delete 自定义名称
npm i pm2 -g
pm2 start .\app.js --name demo_vue
vue项目优化与上线的更多相关文章
- Vue项目优化首屏加载速度
Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...
- vue项目 打包部署上线
1. npm run dev:本地开发的时候做调试用的. 2. npm run build:打包部署上线,生成一个 dist 文件夹. 注意:用 npm run build 时,常遇到因引用路径不对导 ...
- 用prerender-spa-plugin插件Vue项目优化SEO做ssr服务端渲染及预渲染
今天在做公交的时候没干,用手机看看文章,偶然发现了一个关于Vue优化seo的文章,我先是在Vue的官方文档看了一篇关于Vue做SEO优化的文章. 上面提到了nuxt.js这个框架,这个框架我做过一个小 ...
- vue项目优化--使用CDN和Gzip
使用vue-cli构建的vue项目,在打包发布的时候,发现打包后的文件体积很大,使用webpack-bundle-analyzer分析后,发现占用空间最多的是引用的第三方依赖.第三方的依赖文件可以使用 ...
- vue项目优化之按需加载组件-使用webpack require.ensure
require-ensure和require-amd的区别: require-amd 说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调 ...
- Vue 项目优化,持续更新...
一.减少打包的体积 通过vue-cli 初始化项目后,使用 npm run build 生成的JS文件往往会很大,加载时间过长导致页面长时间白屏,所以我们尽可能的使用一下方法来减少打包体积. 1.1 ...
- 第十章、Vue项目的联调上线
抓包 Fiddler 一.解决跨域 proxyTable(查看博客总结) 二.解决用本机ip地址不能访问 在dev中加上 --host 0.0.0.0就可以用本机ip访问,这样的话可以用手机在内网(局 ...
- vue项目优化,加快服务器端渲染速度
1. CSS在开发模式中用import,在打包后用CDN min.js中做如下操作 if (process.env.NODE_ENV == 'development') { require('../x ...
- vue项目优化之路由懒加载
const login = () =>import('@/views/login'); export default new Router({ routes:[ { path:'/login', ...
随机推荐
- Spring学习(四)--Spring的IOC
1.BeaDefinition的Resource定位 (1)直接使用BeanDefinitionFactory 定义一个Resource来定位容器使用的BeanDefinition. Resource ...
- gRPC-微服务间通信实践
微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...
- Python-joypy和 R-ggridges 峰峦图制作
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于DataCharm,作者 宁海涛 转载地址 https://www ...
- 基础篇:深入解析JAVA泛型和Type类型体系
目录 1 JAVA的Type类型体系 2 泛型的概念 3 泛型类和泛型方法的示例 4 类型擦除 5 参数化类型ParameterizedType 6 泛型的继承 7 泛型变量TypeVariable ...
- 达梦产品技术支持培训-day2-DM8常用SQL
(本文只作为随笔或个人笔记,非官方文档,请勿作他用,谢谢) DM8数据库的SQL兼容性很高,和Oracle差距不大,以下是个人认为比较关键的部分. 1.关键动词 create --新建 drop -- ...
- node-macaddress
下载 node-macaddressnode-macaddress 检索Linux.OS X和Windows中的MAC地址. 关于MAC地址的一个常见误解是,每个主机只有一个MAC地址, 虽然一个主机 ...
- 安装redis,phpstudy
第一步: 先下载一下我分享自己的百度网盘里面的资料,网友们下载即可 链接:https://pan.baidu.com/s/1SVO-yAEqbFuvhiiI6Dm3VQ 提取码:u8t0 复制这段内容 ...
- Java死锁编码及定位分析的demo
死锁 死锁是什么 大学课程中的四个要素: (1)互斥(2)不可抢占(3)循环等待(4)请求保持 也就是下图所描述 产生死锁的主要原因 (1)系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当 ...
- .net core中的那些常用的日志框架(Serilog篇)
前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...
- 发布TrajStat 1.4.4
发布TrajStat 1.4.4 (MeteoInfo Java版插件),在PSCF和CWT源区分析中增加了依据格点中的气团轨迹条数为权重进行结果处理的功能.之前的仅有按照轨迹节点数目进行权重处理的功 ...