Vue項目中打包優化的四種方法詳解

前言

默認情況下,通過import語法導入的第三方依賴包,最終會全部打包到一個js文件中,會導致單文件體積過大大,在網速底下時會阻塞網頁加載,影響用戶體驗。

打包優化的目的:

1、項目啟動速度,和性能

2、必要的清理數據

3、減少打包後的體積

第一點是核心,第二點呢其實主要是清理console

性能優化的主要方向:

路由懶加載

去除生產版console.log的打印輸出

開發版使用依賴項,生產版使用在線CDN

項目打包及配置

1.異步組件配置(路由懶加載)

一上來加載所有的組件, 首屏加載就比較慢, 可以配置路由按需加載

當打包構建項目時,js包會變得非常大,影響頁面加載,我們把不同路由的對應組件分割成不同的代碼塊,然後當路由被訪問的時候加載對應的組件,這樣能提升訪問效率。

切分之後,並不是瀏覽器訪問某個路由,才去下載對應的模塊,仍然在首次訪問程序時,下載所有模塊,隻不過每個模塊分的很小,加載首頁時需要的模塊能夠更快的下載下來,所以能夠更快的顯示

具體分三步:

  • 安裝包  npm install –save-dev @babel/plugin-syntax-dynamic-impor
  • 在babel.config.js配置文件中加入插件
  • 將路由改為按需加載的形式
import Vue from 'vue'
import VueRouter from 'vue-router'
 
Vue.use(VueRouter)
 
const routes = [
  {
    path: '/Login',
    name: 'Login',
    // 路由懶加載
    component: () => import('../views/Login/index.vue')
  },
  {
    path: '/',
    component: () => import('../views/layout/index.vue'),
    children: [
      {
        path: '',
        component: () => import('../views/Home/index.vue')
      }
    ]
  }
]
 
//或者如下
 
const Login = () => import('@/views/Login')
const Reg = () => import('@/views/Reg')
const Layout = () => import('@/views/Layout')

2.去掉打包後的 console

打包上線後的console語句沒有任何作用,所以我們應該移除它,除去手動移除,還可以使用插件的方式來移除代碼裡的console語句。

  安裝依賴 : yarn add terser-webpack-plugin -D (npm i terser-webpack-plugin -D)

在vue.config.js修改配置文件

// 獲取當前的打包環境(具體文章最後會說明)
const env = process.env.NODE_ENV
// 覆蓋默認的webpack配置
module.exports = {
  publicPath: './',  //首次加載白屏(打包後文件路徑問題)
  devServer: {
    port: 3000,
    open: true
  },
  chainWebpack: (config) => {
    config.optimization.minimizer('terser').tap((args) => {
      args[0].terserOptions.compress.drop_console = true
      return args
    })
  } 
}

3.使用CDN

使用CDN,減少包的體積。 將線上環境中用到的一些依賴,使用CDN網絡節點的方式進行引用,而不是直接打包到包裡。

項目開發階段和生產階段不一樣,我們在開發階段還是要使用import導入依賴的方式來進行開發,在生產階段再配置CDN外鏈來獲取項目依賴。

默認情況下,Vue項目的開發模式和發佈模式,共同使用一個打包的入口文件(src/main.js)為瞭將項目的開發過程與發佈過程分離,我們可以分別使用兩個入口文件,一個用於開發環境打包(這個就是main.js),一個用於生產環境打包

在vue.config.js中

// 是否為生產環境
const isProduction = process.env.NODE_ENV !== 'development';
 
// 本地環境是否需要使用cdn
const devNeedCdn = false
 
// cdn鏈接
const cdn = {
    // cdn:模塊名稱和模塊作用域命名(對應window裡面掛載的變量名稱)
    externals: {
        vue: 'Vue',
        vuex: 'Vuex',
        'vue-router': 'VueRouter',
        'marked': 'marked',
        'highlight.js': 'hljs',
        'nprogress': 'NProgress',
        'axios': 'axios'
    },
    // cdn的css鏈接
    css: [
        
    ],
    // cdn的js鏈接
    js: [
        'https://cdn.bootcss.com/vue/2.6.10/vue.min.js',
        'https://cdn.bootcss.com/vuex/3.1.2/vuex.min.js',
        'https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js',
        'https://cdn.bootcss.com/axios/0.19.2/axios.min.js'
    ]
}
 
module.exports = {
    chainWebpack: config => {
        // ============註入cdn start============
        config.plugin('html').tap(args => {
            // 生產環境或本地需要cdn時,才註入cdn
            if (isProduction || devNeedCdn) args[0].cdn = cdn
            return args
        })
        // ============註入cdn start============
    },
    configureWebpack: config => {
        // 用cdn方式引入,則構建時要忽略相關資源
        if (isProduction || devNeedCdn) config.externals = cdn.externals
    }
}
 <!-- 使用CDN的CSS文件 -->
 <% for (var i in htmlWebpackPlugin.options.cdn &&
  htmlWebpackPlugin.options.cdn.css) { %>
  <link
          href="<%=%20htmlWebpackPlugin.options.cdn.css[i]%20%>" rel="external nofollow" 
          rel="stylesheet"
  />
  <% } %>
  <!-- 使用CDN的CSS文件 -->
 
 
  <!-- 使用CDN的JS文件 -->
 <% for (var i in htmlWebpackPlugin.options.cdn &&
  htmlWebpackPlugin.options.cdn.js) { %>
  <script src="<%=%20htmlWebpackPlugin.options.cdn.js[i]%20%>"></script>
  <% } %>
  <!-- 使用CDN的JS文件 -->

4.yarn build生成dist目錄

得到一個dist目錄,這個目錄包含瞭項目中所有的頁面,樣式,業務, 第三方包, 默認html文件中引入瞭資源文件是以項目根目錄引入的, 雙擊目前是打開不瞭的 可以 借助vscode中的live-sever

打包的過程中, 會對代碼進行壓縮合並, 版本降級, 語法轉換等…

module.exports = {
  publicPath: './',  //解決路徑問題
  devServer: {
    port: 3000,   //改變端口號
    open: true    //運行後,自動打開瀏覽器運行
  }
}

總結

到此這篇關於Vue項目中打包優化的四種方法的文章就介紹到這瞭,更多相關Vue項目打包優化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: