vue项目上线前优化

250 阅读2分钟

1、加进度条效果 安装运行依赖 nprogress //main.js 中写入

import NProgress from 'nprogress';
import 'nprogress/nprogress.css'

// 添加请求拦截器

axios.interceptors.request.use(function (config) {
  NProgress.start();//加载
  return config;
});

// 添加响应拦截器

axios.interceptors.response.use(function (response) {
  NProgress.done();//结束加载
  return response;
});

2、发布阶段自动清空console.log();
安装开发依赖 babel-plugin-transform-remove-console
//babel.config.js中写入以下

const prodPlugins = [];
if (process.env.NODE_ENV === 'proeuction') { //判断运行阶段加执行参数
  prodPlugins.push('transform-remove-console');
}
module.exports = {  
  plugins: [//在此webpack参数写入
    ...prodPlugins 
  ]
}

3、通过 chainWebpack 自定义打包入口,首页内容定制,在发布阶段使用cdn外部资源
//新建两个文件main-prod.js和main-dev.js
//vue.config.js写入以下

chainWebpack: config => {
    //发布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      config.entry('app').clear().add('./src/main-prod.js')
      config.set('externals', { //通过 externals 加载外部 CDN 资源
        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 => {//控制index.html页面的CDN外部引用不显示
        args[0].isProd = false
        return args
      })
    })
}

//index.html写入以下

<% if(htmlWebpackPlugin.options.isProd) { %>
<link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" />
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css" />
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css" />
<script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script>
<script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
<script src="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script>
<script src="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script>
<script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
<script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script>
<% } %>

//main-prod.js文件里注释掉所有的.css文件,用以上形式引入

4、路由懒加载 router.vuejs.org/zh/guide/ad…
//npm install --save-dev @babel/plugin-syntax-dynamic-import (也可以用vue ui可视化安装依赖)
//babel.config.js文件中写入以下

plugins: [//在此webpack参数写入
    '@babel/plugin-syntax-dynamic-import' //懒加载
]

5、服务器node配置web服务器与gZip压缩(没有node就安装下)
npm install compression -S //安装gZip压缩
//新建serve.js文件写入以下

const express = require('express')
const compression = require('compression');
// 创建 web 服务器
const app = express()
// 启用中间件(gzip压缩)
app.use(compression());
// 托管静态资源
app.use(express.static('./dist'))
// 启动 web 服务器
app.listen(2001, () => { //线上设置80端口
    console.log('web server running at http://127.0.0.1')
})

6、配置 HTTPS 服务(一般公司后台配置,私人项目用下)
//申请SSL证书,免费站点:freessl.cn/
//输入自己的邮箱并选择相关选项
//验证 DNS(在域名管理后台添加 TXT 记录)。
//验证通过之后,下载 SSL 证书( full_chain.pem 公钥;private.key 私钥)。
//在node创建的web服务器文件(我:server.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为一般约定端口

7、使用 pm2 管理应用(关闭终端,在后台运行node服务)
在服务器中安装 pm2:npm i pm2 -g
启动项目:pm2 start 脚本 --name 自定义名称 (我:pm2 start public/app.js --name vue-web)
查看运行项目:pm2 ls
重启项目:pm2 restart 自定义名称/id
停止项目:pm2 stop 自定义名称/id
删除项目:pm2 delete 自定义名称/id