Optimización del proyecto vue (element-ui)

Se agregó la barra de progreso de optimización del proyecto

  • Instale nprogress, la interfaz de usuario depende de las dependencias de instalación, solo busque nprogress para instalar

  • Importar el componente de la barra de progreso en main

    // Importar el complemento de la barra de progreso 
    import NProgress from'nprogress ' 
    // Importar el estilo de la barra de progreso 
    import'nprogress / nprogress.css'
  • Utilice NProgress.start () para mostrar la barra de progreso

    NProgress.start ()
  • Utilice NProgress.done () para ocultar la barra de progreso

    NProgress.done ()

Quitar la consola empaquetada

  • 安装 babel-plugin-transform-remove-console

  • Agregue "transform-remove-console" en el nodo de complementos

    "plugins": [ 
        [ 
          "componente", 
          { 
            "libraryName": "element-ui", 
            "styleLibraryName": "theme-chalk" 
          } 
        ], 
        "transform-remove-console" 
      ]

Solo retire la consola durante la fase de lanzamiento

  • Utilice process.env.NODE_ENV para determinar si la versión actual es la etapa de desarrollo

    prodPlugins var = [] 
    si (process.env.NODE_ENV == 'producción') { 
      prodPlugins.push ( 'transformar-remove-consola') 
    }
  • Utilice el operador de expansión para pasar los complementos de la matriz a los complementos

    "plugins": [ 
        [ 
          "componente", 
          { 
            "libraryName": "element-ui", 
            "styleLibraryName": "theme-chalk" 
          } 
        ], 
        ... prodPlugins 
      ]

Utilice vue.config.js para modificar la configuración predeterminada de webpack

  • Cree el archivo vue.config.js

  • Un objeto de configuración está expuesto dentro de js

    module.exports = { 
      
    }

Archivo de entrada personalizado

  • Utilice chainWebpack para configurar diferentes entornos para establecer diferentes archivos de entrada

    chainWebpack: config => { 
        // El entorno actual es la etapa de lanzamiento 
        config.when (process.env.NODE_ENV == 'production', config => { 
          config.entry ('app'). clear (). add (' ./ src / main-prod.js ') 
        }) 
        // El entorno actual está en la etapa de desarrollo 
        config.when (process.env.NODE_ENV ==' development ', config => { 
          config.entry (' app ') .clear (). add ('./ src / main-dev.js') 
        }) 
      }

Cargar recursos externos a través de cdn

  • Debido a que el archivo de importación se importa al paquete a través de la importación, eventualmente se empaquetará en el mismo archivo js, ​​lo que hace que el archivo de chunk-vendors sea demasiado grande

  • Dado que estos archivos están empaquetados en el mismo archivo js, ​​el volumen es demasiado grande, así que ignore algunos archivos js y no el paquete (solo es necesario configurar la etapa de lanzamiento)

    // Use externals para establecer exclusiones 
    config.set ('externals', { 
      vue: 'Vue', 
      'vue-router': 'VueRouter', 
      axios: 'axios', 
      echarts: 'echarts', 
      nprogress: 'NProgress', 
      'vue-quill-editor': 'VueQuillEditor' 
    })
  • Aunque algunos archivos js se ignoran, todavía hay algunos archivos css en el archivo de entrada que son relativamente grandes, así que elimine directamente el css importado

    import VueQuillEditor from'vue-quill-editor ' 
    // Editor de texto enriquecido 
    import'quill / dist / quill.core.css 
    ' import'quill / dist / quill.snow.css 
    'import'quill / dist / quill.bubble. css '
  • Después de eliminar el css anterior sin empaquetar, el estilo final definitivamente será problemático, por lo que presentamos el archivo de recursos de cdn en index.html en público

    <! - Archivo de hoja de estilo de nprogress -> 
    <link rel = "stylesheet" href = "https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" /> 
    <! - Style archivo de hoja para el editor de texto enriquecido -> 
    <link rel = "stylesheet" href = "https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" /> 
    <link rel = " hoja de estilo "href =" https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css "/> 
    <link rel =" hoja de estilo "href =" https: //cdn.staticfile .org /quill/1.3.4/quill.bubble.min.css "/>
  • También ignoramos que el archivo js correspondiente no está empaquetado, por lo que también introducimos directamente recursos cdn en index.html en público

    <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/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/[email protected]/dist/vue-quill-editor.js "> </ guión>

Configurar el recurso cdn de element-ui

  • Elimine el elemen.js importado bajo demanda en el archivo de entrada

  • Importar el recurso cdn del elemento

    <! - El archivo de hoja de estilo de element-ui -> 
    <link rel = "stylesheet" href = "https://cdn.staticfile.org/element-ui/2.13.0/theme-chalk/index.css" /> 
    <! - archivo js de element-ui -> 
    <script src = "https://cdn.staticfile.org/element-ui/2.13.0/index.js"> </script>

Personalice el contenido de la página de inicio diferente según los diferentes entornos

Necesitamos determinar si el entorno actual es la etapa de desarrollo o la etapa de lanzamiento en index.html, pero process.env.NODE_ENV no se puede obtener en index.html, pero los datos de configuración del complemento htmlWebpackPlugin se pueden obtener en index .html.

¿Por qué?

  • La primera función obtiene index.html y genera un nuevo index.html

  • Los archivos js y css empaquetados se introducirán automáticamente

  • Si es la etapa de publicación, agregamos una bandera a htmlWebpackPlugin como verdadero

    // Use el complemento 
    config.plugin ('html'). Tap (args => { 
      // Agregar parámetro isProd 
      args [0] .isProd = true 
      return args 
    })
  • Si está en la etapa de desarrollo, agregue un logotipo, que es flase

    // Use el complemento 
    config.plugin ('html'). Tap (args => { 
      // Agregar parámetro isProd 
      args [0] .isProd = false 
      return args 
    })
  • Obtenga el logotipo a través de htmlWebpackPlugin en la página y juzgue si el logotipo es verdadero o falso. Si es verdadero, significa la etapa de lanzamiento, debe agregar el recurso cdn, si es falso, no es necesario agregarlo. .

    <% if (htmlWebpackPlugin.options.isProd) {%> 
    archivo de recursos cdn 
     <%}%>

Implementar la carga diferida de enrutamiento

También conocido como: enrutamiento de carga bajo demanda

Cuando una ruta coincide, se carga el archivo de recursos correspondiente

  • 安装 @ babel / plugin-syntax-dynamic-import

  • Configurar complementos de babel

    "plugins": [ 
        [ 
          "componente", 
          { 
            "libraryName": "element-ui", 
            "styleLibraryName": "theme-chalk" 
          } 
        ], 
        ... prodPlugins, 
        "@ babel / plugin-syntax-dynamic-import" 
      ]
  • Modificar el método de introducción

    // Página de inicio de sesión 
    const Login = () => import (/ * webpackChunkName: "login" * / '.. / components / Login.vue') 
    // Página de inicio 
    const Home = () => importar (/ * webpackChunkName: "HomeWelcome" * / '.. / components / Home.vue') 
    const Welcome = () => import (/ * webpackChunkName: "HomeWelcome" * / '.. / components / Welcome.vue') 
    // Lista de usuarios 
    const User = () => import (/ * webpackChunkName: "usuario" * / '.. / components / user / Users.vue') 
    // Gestión de 
    derechos const Rights = () => import (/ * webpackChunkName: "Derechos" * /'../components/power/Rights.vue ') 
    const Roles = () => import (/ * webpackChunkName: "Derechos" * /' .. / components / power / Roles.vue ') 
    // Gestión de productos básicos 
    const Categorías = () => importar (/ * webpackChunkName: "mercancías" * / '.. / componentes / mercancías / Categorías.vue')
    const Params = () => importar (/ * webpackChunkName: "bienes" * / '../components/goods/Params.vue')
    const Bienes = () => importar (/ * webpackChunkName: "bienes" * / '../components/goods/Goods.vue') 
    const GoodsAdd = () => importar (/ * webpackChunkName: "bienes" * / ' ../components/goods/GoodsAdd.vue ') 
    // 订单 管理
    const Orders = () => import (/ * webpackChunkName: "goods" * /' ../components/orders/Orders.vue ') 
    // 数据管理
    const Reports = () => importar (/ * webpackChunkName: "mercancías" * / '../components/Reports.vue')

Supongo que te gusta

Origin blog.csdn.net/qq_34194159/article/details/108228945
Recomendado
Clasificación