添加进度条
给项目添加进度条效果,先打开项目控制台,打开依赖,安装nprogress。打开main.js,编写如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import NProgress from 'nprogress'
import 'nprogress/nprogress.css' .....
axios.interceptors.request.use(config => { NProgress.start() config.headers.Authorization = window.sessionStorage.getItem("token") return config })
axios.interceptors.response.use(config =>{ NProgress.done() return config })
|
执行build
安装一个插件(babel-plugin-transform-remove-console)在项目build阶段移除所有的console信息
打开项目控制台,点击依赖->开发依赖,输入babel-plugin-transform-remove-console,安装
打开babel.config.js,编辑代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const productPlugins = []
if(process.env.NODE_ENV === 'production'){ productPlugins.push("transform-remove-console") }
module.exports = { "presets": [ "@vue/app" ], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ], ...productPlugins ] }
|
生成打包报告
A.命令行形式生成打包报告
vue-cli-service build --report
B.在vue控制台生成打包报告
点击“任务”=>“build”=>“运行”
运行完毕之后点击右侧“分析”,“控制台”面板查看报告
修改webpack的默认配置
默认情况下,vue-cli 3.0生成的项目,隐藏了webpack配置项,如果我们需要配置webpack
需要通过vue.config.js来配置。
在项目根目录中创建vue.config.js文件,
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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') }) } }
|
加载外部CDN
默认情况下,依赖项的所有第三方包都会被打包到js/chunk-vendors.******.js
文件中,导致该js文件过大
那么我们可以通过externals排除这些包,使它们不被打包到js/chunk-vendors.******.js
文件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| module.exports = { chainWebpack:config=>{ config.when(process.env.NODE_ENV === 'production',config=>{ config.entry('app').clear().add('./src/main-prod.js')
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') }) } }
|
设置好排除之后,为了使我们可以使用vue,axios等内容,我们需要加载外部CDN的形式解决引入依赖项。
打开开发入口文件main-prod.js,删除掉默认的第三方组件的样式表引入代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import Vue from 'vue' import App from './App.vue' import router from './router'
import './assets/fonts/iconfont.css'
import './assets/css/global.css'
import TreeTable from 'vue-table-with-tree-grid'
import NProgress from 'nprogress'
import axios from 'axios'
import VueQuillEditor from 'vue-quill-editor'
|
然后打开public/index.html添加外部cdn引入代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <!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>电商后台管理系统</title>
<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" /> <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.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>
<script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
</head>
|
定制首页内容
开发环境的首页和发布环境的首页展示内容的形式有所不同
如开发环境中使用的是import加载第三方包,而发布环境则是使用CDN,那么首页也需根据环境不同来进行不同的实现
我们可以通过插件的方式来定制首页内容,打开vue.config.js,编写代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| module.exports = { chainWebpack:config=>{ config.when(process.env.NODE_ENV === 'production',config=>{ ...... 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中使用插件判断是否为发布环境并定制首页内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html lang="en"> <head> ... <title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>电商后台管理系统</title>
<% if(htmlWebpackPlugin.options.isProd){ %> <link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" /> ........ <script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script> <% } %> </head>
|
路由懒加载
当路由被访问时才加载对应的路由文件,就是路由懒加载。
路由懒加载实现步骤:
1.安装 @babel/plugin-syntax-dynamic-import
打开vue控制台,点击依赖->安装依赖->开发依赖->搜索@babel/plugin-syntax-dynamic-import
点击安装。
2.在babel.config.js中声明该插件,打开babel.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const productPlugins = []
if(process.env.NODE_ENV === 'production'){ productPlugins.push("transform-remove-console") }
module.exports = { "presets": [ "@vue/app" ], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ], ...productPlugins, "@babel/plugin-syntax-dynamic-import" ] }
|
3.将路由更改为按需加载的形式,打开router.js,更改引入组件代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import Vue from 'vue' import Router from 'vue-router' const Login = () => import( './components/Login.vue')
const Home = () => import( './components/Home.vue')
const Welcome = () => import( './components/Welcome.vue')
const Users = () => import( './components/user/Users.vue')
const Rights = () => import( './components/power/Rights.vue')
const Roles = () => import( './components/power/Roles.vue')
const Cate = () => import( './components/goods/Cate.vue')
const Params = () => import( './components/goods/Params.vue')
const GoodList = () => import( './components/goods/List.vue')
const GoodAdd = () => import( './components/goods/Add.vue')
const Order = () => import( './components/order/Order.vue')
const Report = () => import( './components/report/Report.vue')
|
项目上线
A.通过node创建服务器
创建nod项目,并安装express,通过express快速创建web服务器,将vue打包生成dist文件夹,托管为静态资源。
在vue_shop同级创建一个文件夹vue_shop_server存放node服务器,使用终端打开vue_shop_server文件夹,输入命令 npm init -y,初始化包之后,输入命令 npm i express -S,打开vue_shop目录,复制dist文件夹,粘贴到vue_shop_server中
在vue_shop_server文件夹中创建app.js文件,编写代码如下:
1 2 3 4 5 6 7 8 9
| const express = require('express')
const app = express()
app.use(express.static('./dist'))
app.listen(8998,()=>{ console.log("server running at http://127.0.0.1:8998") })
|
然后再次在终端中输入 node ./app.js
B.开启gzip压缩
打开vue_shop_server文件夹的终端,输入命令:npm i compression -D
打开app.js,编写代码:
1 2 3 4 5 6 7 8 9 10 11 12
| const express = require('express')
const compression = require('compression')
const app = express()
app.use(compression()) app.use(express.static('./dist'))
app.listen(8998,()=>{ console.log("server running at http://127.0.0.1:8998") })
|
C.配置https服务
配置https服务一般是后台进行处理,前端开发人员了解即可。
首先,需要申请SSL证书,进入https://freessl.cn官网
在后台导入证书,打开今天资料/素材,复制素材中的两个文件到vue_shop_server中
打开app.js文件,编写代码导入证书,并开启https服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 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'))
https.createServer(options,app).listen(443)
|
D.使用pm2管理应用
打开vue_shop_server文件夹的终端,输入命令:npm i pm2 -g
使用pm2启动项目,在终端中输入命令:pm2 start ./app.js --name 自定义名称
查看项目列表命令:pm2 ls
重启项目:pm2 restart 自定义名称
停止项目:pm2 stop 自定义名称
删除项目:pm2 delete 自定义名称