vue-上线优化

生成打包报告

  1. 通过命令行参数的形式生成报告
    在终端执行命令:vue-cli-service build --report。会生成一个report.html文件的打包报告。
  2. 在终端执行命令:vue ui ,进入可视化ui面板,可以在其中的build模块查看打包报告。

修改webpack的默认配置

通过vue-cli创建的项目中,默认隐藏了webpack的配置。

  1. 通过创建vue.config.js修改webpack的默认配置。参考文档:https://cli.vuejs.org/zh/config/#vue-config-js

修改打包入口

***//将main.js改成两个相同的main-dev.js,main-prod.js***
module.exports = {
    chainWebpack: config => {
        config.when(process.env.NODE_ENV === 'production', config =>{
        //发布阶段的打包入口,process.env.NODE_ENV可以拿到当前的模式。
            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')
        })
    }
}

加载外部CDN资源(externals)

默认情况下,通过impor语法导入的第三方依赖包,最终会被打包并合并到同一个文件中,从而导致打包成功后,单文件体积过大的问题。

  1. vue.config.js文件中的发布模式配置externals节点
    如:
***//将main.js改成两个相同的main-dev.js,main-prod.js***
module.exports = {
    chainWebpack: config => {
        config.when(process.env.NODE_ENV === 'production', config =>{
        //发布阶段的打包入口,process.env.NODE_ENV可以拿到当前的模式。
            config.entry('app').clear().add('./src/main-prod.js')
            config.set('externals',{**//externals需要用config.set来设置。**
				vue: 'Vue',**//健为要引入的包名,值为为其的重命名**
				vue-router: 'VueRouter',**//有短横线分隔的需要用引号包裹。**
				axios: 'axios',
				lodash: '_',
				echarts: 'echarts',
				nprogress: 'nprogress',
				'vue-quill-aditor': 'VueQuillEdutor'
			})
        })
        config.when(process.env.NODE_ENV === 'development', config =>{
        //开发阶段的打包入口
            config.entry('app').clear().add('./src/main-dev.js')
        })
    }
}
  1. 把main-prod.js中的inport语句删掉。在index.html中通过link标签和script标签的方式把相应的css样式、js做全局导入。

通过CDN优化ElementUI的打包

发布阶段由于element-ui的组件包比较大,导致文件本身体积过大。也通过CDN的形式来加载。

  1. 在main-prod.js中,注释掉element-ui按需加载代码
  2. 在index.html中的头部通过link和script标签导入element-ui的js和css样式。

首页自定义配置

  1. vue.config.js文件中配置config.plugin来配置参数变量。如:
***//将main.js改成两个相同的main-dev.js,main-prod.js***
module.exports = {
    chainWebpack: config => {
        config.when(process.env.NODE_ENV === 'production', config =>{
        //发布阶段的打包入口,process.env.NODE_ENV可以拿到当前的模式。
            config.entry('app').clear().add('./src/main-prod.js')
            config.set('externals',{**//externals需要用config.set来设置。**
				vue: 'Vue',**//健为要引入的包名,值为为其的重命名**
				vue-router: 'VueRouter',**//有短横线分隔的需要用引号包裹。**
				axios: 'axios',
				lodash: '_',
				echarts: 'echarts',
				nprogress: 'nprogress',
				'vue-quill-aditor': 'VueQuillEdutor'
			})
			**config.plugin('html').tap(args => {
				args[0].isProd = true//isProd是自定义的变量名
				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
			})**
        })
    }
}
  1. 在index.html的title标签中做一个三元运算用来判断是开发模式还是发布模式。如:
<!DOCTYPE html>
<html lang="en">
  <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.isProd?'发布模式' : '开发模式' %></title>**
    //也可以用来控制按需加载的CDN(CDN是指通过link和script方式加载的资源)
    **<% if(htmlWebpackPlugin.options.isProd) { %>** //左大括号不能省
    //通过externals加载的外部CDN资源。
   <link rel="icon" href="<%= BASE_URL %>favicon.ico"> //发布模式需要加载的css样式
   <script src=""></script>//发布模式需要加载的js文件样式
  **<% } %>** //右大括号不能省,表示结束
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

路由懒加载

当项目过大时,路由文件会随之变大,为了避免文件过大,设置路由懒加载,通过分组的形式加载整组路由,而不是单独加载。

  1. 安装@babel/plugin-syntax-dynamic-import 包。在vue ui可视化中加载开发依赖中搜索
  2. 在babel.config.js配置文件中申明该插件。在plugins中申明插件
module.exports = {
  'presets': [
    '@vue/cli-plugin-babel/preset'
  ],
  'plugins': [
    [
      'component',
      {
        'libraryName': 'element-ui',
        'styleLibraryName': 'theme-chalk'
      }
    ]
    **'@babel/plugin-syntax-dynamic-import'//这里就是申明插件**
  ]
}
  1. 将路由改为按需加载的形式
import Vue from 'vue'
import VueRouter from 'vue-router'
//路由懒加载主要改变import载入的方式
//import Login qqq '../components/qqq.vue'
//import Login www '../components/www.vue'
//import Login eee '../components/eee.vue'
///第一组改编
const qqq = () => import(/* webpackChunkName: group-name1 */ '../components/qqq.vue')//group-name1为组名,同组路由会一同加载
const www = () => import(/* webpackChunkName: group-name1 */ '../components/www.vue')
const eee = () => import(/* webpackChunkName: group-name1 */ '../components/eee.vue')

//import Login aaa '../components/aaa.vue'
//import Login sss '../components/sss.vue'
//import Login ddd '../components/ddd.vue'
///第二组改编
const aaa = () => import(/* webpackChunkName: group-name2 */ '../components/aaa.vue')//group-name2为组名,同组路由会一同加载
const sss = () => import(/* webpackChunkName: group-name2 */ '../components/sss.vue')
const ddd = () => import(/* webpackChunkName: group-name2 */ '../components/ddd.vue')
//路由懒加载的分组设置
Vue.use(VueRouter)
export default new VueRouter({
  routes: [
  //第一组
    {path: '/qqq', component: qqq },
    {path: '/www', component: www },
    {path: '/eee', component: eee },
   //第二组
    {path: '/aaa', component: aaa },
    {path: '/sss', component: sss },
    {path: '/ddd', component: ddd }
  ]
})

项目上线

创建node服务器

创建node项目,安装express,通过express快速创建web服务器,将vue打包生成的dist文件夹托管为静态资源即可。代码如下:

const express = require('express')
const app = express()//创建服务器
app.use(express.static('./dist'))//托管静态资源
app.listen(8000,()=>{//启动服务器
	console.log('服务器已启动')
})

开启gzip配置

使用gzip可以减少文件体积,使传输速度更快
可以通过服务器端使用express做gizp压缩。配置如下:

  1. 安装compression包,如:npm install compression -D
  2. 导包。如:const compression = require(‘compression’);
  3. 启动中间件,如:app.use(compression()) //一定要卸载托管今天资源之前,不然不会生效。
    如:
const express = require('express')
const compression = require('compression')
const app = express()//创建服务器
app.use(compression())//必须放在托管静态资源之前。
app.use(express.static('./dist'))//托管静态资源
app.listen(8000,()=>{//启动服务器
	console.log('服务器已启动')
})

配置HTTPS服务

数据加密

  1. 申请SSL证书。(个人测试申请网站:https://freessl.org)
  2. 注册并下载ssl证书。(full_chain.pem公钥,private.key私钥)
  3. 在后台证书导入:
    如:
//在app.js中写的
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)//默认端口443

使用pm2管理应用

都是在终端上运行的
使node项目可以后台运行

  1. 在服务器中安装pm2:npm i pm2 -g
  2. 启动项目:pm2 start脚本 --name自定义名称
  3. 查看运行项目:pm2 ls
  4. 重启项目:pm2 restart 自定义名称
  5. 停止项目:pm2 stop 自定义名称
  6. 删除项目:pm2 delete 自定义名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值