• Vue电商管理项目


    Vue电商管理项目

    1. 添加路由守卫
      如果用户没有登录,不能访问/home,如果用户通过url地址直接访问,则强制跳转到登录页面 打开router/index.js

      //挂载路由导航守卫,to表示将要访问的路径,from表示从哪里来,next是下一个要做的操作
      router.beforeEach((to,from,next)=>{ 
        //获取token
        const tokenStr = window.sessionStorage.getItem('token');
        if(!tokenStr||to.path === '/login')
          return next('/login');
        next();
      })
    2. axios请求拦截器
      后台除了登录接口之外,都需要token权限验证,通过添加axios请求拦截器来添加token,以保证拥有获取数据的权限,在main.js中添加代码,在将axios挂载到vue原型之前添加下面的代码

      //请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
      axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
      //请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
      axios.interceptors.request.use(config=>{
        //为请求头对象,添加token验证的Authorization字段
        config.headers.Authorization = window.sessionStorage.getItem("token")
        return config
      })
    3. 添加过滤器
      添加过滤器实现将标准时间显示为所需格式

      //创建过滤器将秒数过滤为年月日,时分秒
      Vue.filter('dateFormat',function(originVal){
        const dt = new Date(originVal)
        const y = dt.getFullYear()
        const m = (dt.getMonth()+1+'').padStart(2,'0')
        const d = (dt.getDate()+'').padStart(2,'0')
      
        const hh = (dt.getHours()+'').padStart(2,'0')
        const mm = (dt.getMinutes()+'').padStart(2,'0')
        const ss = (dt.getSeconds()+'').padStart(2,'0')
      
        return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
      })
    4.  富文本插件
      使用富文本插件vue-quill-editor,先从依赖安装该插件,引入并注册vue-quill-editor,打开main.js,编写如下代码

      //导入vue-quill-editor(富文本编辑器)
      import VueQuillEditor from 'vue-quill-editor'
      //导入vue-quill-editor的样式
      import 'quill/dist/quill.core.css'
      import 'quill/dist/quill.snow.css'
      import 'quill/dist/quill.bubble.css'
      ......
      //全局注册组件
      Vue.component('tree-table', TreeTable)
      //全局注册富文本组件
      Vue.use(VueQuillEditor)
    5.  添加进度条
      给项目添加进度条效果,先打开项目控制台,打开依赖,安装nprogress 打开main.js,编写如下代码

      //导入进度条插件
      import NProgress from 'nprogress'
      //导入进度条样式
      import 'nprogress/nprogress.css'
      .....
      //请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
      axios.interceptors.request.use(config => {
        //当进入request拦截器,表示发送了请求,我们就开启进度条
        NProgress.start()
        //为请求头对象,添加token验证的Authorization字段
        config.headers.Authorization = window.sessionStorage.getItem("token")
        //必须返回config
        return config
      })
      //在response拦截器中,隐藏进度条
      axios.interceptors.response.use(config =>{
        //当进入response拦截器,表示请求已经结束,我们就结束进度条
        NProgress.done()
        return config
      })
    6. build阶段移除所有的console插件
      打开项目控制台,点击依赖->开发依赖,输入babel-plugin-transform-remove-console,安装 打开babel.config.js,编辑代码如下:

      //项目发布阶段需要用到的babel插件
      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
        ]
      }
    7. 加载外部CDN
      默认情况下,依赖项的所有第三方包都会被打包到js/chunk-vendors.**.js文件中,导致该js文件过大 那么我们可以通过externals排除这些包,使它们不被打包到js/chunk-vendors.**.js文件中 

      module.exports = {
          chainWebpack:config=>{
              //发布模式
              config.when(process.env.NODE_ENV === 'production',config=>{
                  //entry找到默认的打包入口,调用clear则是删除默认的打包入口
                  //add添加新的打包入口
                  config.entry('app').clear().add('./src/main-prod.js')
      
                  //使用externals设置排除项
                  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,删除掉默认的引入代码

      import Vue from 'vue'
      import App from './App.vue'
      import router from './router'
      // import './plugins/element.js'
      //导入字体图标
      import './assets/fonts/iconfont.css'
      //导入全局样式
      import './assets/css/global.css'
      //导入第三方组件vue-table-with-tree-grid
      import TreeTable from 'vue-table-with-tree-grid'
      //导入进度条插件
      import NProgress from 'nprogress'
      //导入进度条样式
      // import 'nprogress/nprogress.css'
      // //导入axios
      import axios from 'axios'
      // //导入vue-quill-editor(富文本编辑器)
      import VueQuillEditor from 'vue-quill-editor'
      // //导入vue-quill-editor的样式
      // import 'quill/dist/quill.core.css'
      // import 'quill/dist/quill.snow.css'
      // import 'quill/dist/quill.bubble.css'

      然后打开public/index.html添加外部cdn引入代码

          <!-- nprogress 的样式表文件 -->
          <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" />
          <!-- element-ui 的样式表文件 -->
          <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>
          <!-- 富文本编辑器的 js 文件 -->
          <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>
      
          <!-- element-ui 的 js 文件 -->
          <script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
    8. 定制首页内容
      如开发环境中使用的是import加载第三方包,而发布环境则是使用CDN,那么首页也需根据环境不同来进行不同的实现 我们可以通过插件的方式来定制首页内容,打开vue.config.js,编写代码如下:

      module.exports = {
          chainWebpack:config=>{
              config.when(process.env.NODE_ENV === 'production',config=>{
                  ......
                  //使用插件
                  config.plugin('html').tap(args=>{
                      //添加参数isProd
                      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=>{
                      //添加参数isProd
                      args[0].isProd = false
                      return args
                  })
              })
          }
      }

      然后在public/index.html中使用插件判断是否为发布环境并定制首页内容

          <title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>电商后台管理系统</title>
      
          <% if(htmlWebpackPlugin.options.isProd){ %>
          <!-- nprogress 的样式表文件 -->
          <link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />
          ........
          <!-- element-ui 的 js 文件 -->
          <script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
          <% } %>
    9. 路由懒加载
      当路由被访问时才加载对应的路由文件,就是路由懒加载。 路由懒加载实现步骤: 安装 @babel/plugin-syntax-dynamic-import ,在babel.config.js中声明该插件

      //项目发布阶段需要用到的babel插件
      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"
        ]
      }

      将路由更改为按需加载的形式,打开router.js,更改引入组件示例代码如下:

      
      /* 更改前 */   // import Login from './components/Login.vue'   
      /* 更改后 */   const Login = () => import(/* webpackChunkName:"login_home_welcome" */ './components/Login.vue')    
    10. 项目上线
      node创建服务器:创建一个文件夹存放node服务器 ,使用终端打开文件夹,输入命令 npm init -y 初始化包之后,输入命令 npm i express -S ,打开vue_shop目录,复制dist文件夹,粘贴到vue_shop_server中 在vue_shop_server文件夹中创建app.js文件
      gzip压缩 :打开vue_shop_server文件夹的终端,输入命令:npm i compression -D 打开app.js
      配置https服务 :进入https://freessl.cn官网申请证书,打开app.js文件,编写代码导入证书,并开启https服务

      //读取文件插件
      const fs = require('fs') 
      //创建配置对象设置公钥和私钥
      const options = {
          cert:fs.readFileSync('./full_chain.pem'),
          key:fs.readFileSync('./private.key')
      }
      
      const express = require('express')  //----express
      
      const compression = require('compression') //----gzip
      
      
      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")
      // })
      
      //引入https
      const https = require('https')  
      //启动https服务
      https.createServer(options,app).listen(443)  
    11. pm2管理应用
      安装:npm i pm2 -g
      启动 :pm2 start app.js --name 自定义名称
      查看项目列表命令:pm2 ls
      重启项目:pm2 restart 自定义名称
      停止项目:pm2 stop 自定义名称
      删除项目:pm2 delete 自定义名称

  • 相关阅读:
    图解SQL的Join(转)
    phpmyadmin 自动登录的办法
    ajax的data传参的两种方式
    如何在vue里面访问php?
    vue 路由部署服务器子目录问题
    Vuthink正确安装过程
    关于vueThink框架打包发布的一些问题
    使用npm安装依赖,尽量别使用cnpm,会漏掉很多依赖的
    phpstorm(或webstorm) 打开后 一直停留在scanning files to index....,或跳出内存不够的提示框
    vuethink 配置
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12638619.html
Copyright © 2020-2023  润新知