首頁 web前端 js教程 怎麼優化webpack配置

怎麼優化webpack配置

Apr 16, 2018 am 09:26 AM
web webpack 配置

這次帶給大家怎麼優化webpack配置,優化webpack配置的注意事項有哪些,以下就是實戰案例,一起來看一下。

最近的專案度過了開始忙碌的基礎建設期,也慢慢輕鬆下來,準備記錄自己最近webpack優化的措施,希望有溫故知新的效果。

專案採用的是vue全家桶,建構設定都是基於vue-cli去改進的。關於原始webpack設定大家可以看下這篇文章vue-cli#2.0 webpack設定分析,文章基本上對於檔案每行程式碼都做了詳細的解釋,有助於更好的理解webpack。

仔細總結了一下,自己的優化基本上還是網路上流傳的那幾點

  1. # 透過externals 設定來提取常用函式庫,引用cdn

  2. ##合理配置CommonsChunkPlugin
  3. 善用alias
  4. dllplugin啟用預編譯
  5. happypack多核心建置專案
#

externals

# 文件位址

https://doc.webpack-china.org/configuration/externals/

防止將某些 import 的套件(package)打包到 bundle 中,而是在運行時(runtime)再去從外部獲取這些擴展依賴(external dependencies)。

CommonsChunkPlugin

文件網址https://doc.webpack-china.org/plugins/commons-chunk-plugin/

CommonsChunkPlugin 插件,是一個可選的用於建立一個獨立檔案(又稱作 chunk)的功能,這個檔案包括多個入口 chunk 的公共模組。透過將公共模組拆出來,最終合成的檔案能夠在最開始的時候載入一次,便存起來到快取中供後續使用。這個帶來速度上的提升,因為瀏覽器會迅速將公共的程式碼從快取中取出來,而不是每次造訪一個新頁面時,再去加載一個更大的檔案。

resolve.alias

文件位址 https://doc.webpack-china.org/configuration/resolve/#resolve-alias

建立 import 或

require 的別名,來確保模組引入變得更簡單。例如,一些位於 src/ 資料夾下的常用模組:

不過經過自己的實作最後三點是對自己專案優化最大的。文章也主要對後面幾點詳細說明一下

# 原來打包一個專案所需的時間基本上在40秒左右,那再經過後面三步驟優化大概要多久呢

1.使用dllplugin預編譯與引用

# 首先為什麼要引用Dll?在網路上瀏覽了一些文章後,我發現上除了加快建置速度以外,使用webpack的dll還有一個好處。

Dll打包以後是獨立存在的,只要其包含的函式庫沒有增減、升級,hash也不會變化,因此線上的dll程式碼不需要隨著版本發布頻繁更新。 因為使用Dll打包的基本上都是獨立函式庫文件,這類文件有一個特性就是變化不大。當我們正常打包這些函式庫檔案到一個app.js裡的時候,由於其他業務檔案的改變,影響了快取對建置的最佳化,導致每次都要重新去npm套件裡尋找

相關檔案 。而使用了DLL之後,只要包含的函式庫沒有升級, 增減,就不需要重新打包。這樣也提高了建置速度。

那麼如何使用Dll去最佳化專案呢

首先要建立一個dll的

設定檔,引入專案所需的第三方函式庫。這類庫的特點是不需要隨著版本發布頻繁更新,長期穩定。

const webpack = require('webpack');
const path = require('path');
module.exports = {
 entry: {
  //你需要引入的第三方库文件
  vendor: ['vue','vuex','vue-router','element-ui','axios','echarts/lib/echarts','echarts/lib/chart/bar','echarts/lib/chart/line','echarts/lib/chart/pie',
   'echarts/lib/component/tooltip','echarts/lib/component/title','echarts/lib/component/legend','echarts/lib/component/dataZoom','echarts/lib/component/toolbox'],
 },
 output: {
  path: path.join(dirname, 'dist-[hash]'),
  filename: '[name].js',
  library: '[name]',
 },
 plugins: [
  new webpack.DllPlugin({
   path: path.join(dirname, 'dll', '[name]-manifest.json'),
   filename: '[name].js',
   name: '[name]',
  }),
 ]
};
登入後複製
基本配置參數跟webpack基本上一模一樣,相信來看優化的都懂什麼意思,我就不解釋了。然後執行程式碼編譯檔。 (我的設定檔是放在build裡面,下方路徑依專案路徑需要變動)

webpack -p --progress --config build/webpack.dll.config.js
登入後複製
當執行完執行後,會產生兩個新檔案在目錄同級,一個是產生在dist資料夾下的verdor.js,裡面是剛剛入口依賴被壓縮後的程式碼;一個是dll資料夾下的verdor- manifest.json,將每個庫進行了編號索引,並且使用的是id而不是name。

接下去你只要去你的webpack配置文件的里的plugin中添加一行代码就ok了。

const manifest = require('./dll/vendor-manifest.json');
...
...,
plugin:[
  new webpack.DllReferencePlugin({
    context: dirname,
    manifest,
  }),
]
登入後複製

这时候再执行webpack命令,可以发现时间直接从40秒锐减到了20s左右,整整快了一倍有木有(不知道是不是因为自己依赖库太多了才这样的,手动捂脸)。

2.happypack多线程编译

一般node.js是单线程执行编译,而happypack则是启动node的多线程进行构建,大大提高了构建速度。使用方法也比较简单。以我项目为例,在插件中new一个新的happypack进程出来,然后再使用使用loader的地方替换成对应的id

var HappyPack = require('happypack');
...
...
modules:{
  rules : [
    ...
    {
      test: /\.js$/,
      loader:[ 'happypack/loader?id=happybabel'],
      include: [resolve('src')]
    },
    ...
  ]
},
...
...
plugin:[
  //happypack对对 url-loader,vue-loader 和 file-loader 支持度有限,会有报错,有坑。。。
  new HappyPack({
     id: 'happybabel',
     loaders: ['babel-loader'],
     threads: 4,//HappyPack 使用多少子进程来进行编译
  }),
  new HappyPack({
     id: 'scss',
     threads: 4,
     loaders: [
        'style-loader',
        'css-loader',
        'sass-loader',
     ],
  })
]
登入後複製

这时候再去执行编译webpack的代码,打印出来的console则变成了另外一种提示。而编译时间大概从20s优化到了15s左右(感觉好像没有网上说的那么大,不知道是不是因为本身js比重占据太大的缘故)。

3.善用alias

3.配合resolve,善用alias

本来是没有第三点的,只不过在搜索网上webpack优化相关文章的时候,看到用人提到把引入文件改成库提供的文件(原理我理解其实就是1.先通过resolve指定文件寻找位置,减小搜索范围;2.直接根据alias找到库提供的文件位置)。

vue-cli配置文件中提示也有提到这一点,就是下面这段代码

resolve: {
  //自动扩展文件后缀名,意味着我们require模块可以省略不写后缀名
  extensions: ['.js', '.vue', '.json'],
  //模块别名定义,方便后续直接引用别名,无须多写长长的地址
  alias: {
   'vue$': 'vue/dist/vue.esm.js',//就是这行代码,提供你直接引用文件
   '@': resolve('src'),
  }
 },
登入後複製

然后我将其他所有地方关于vue的引用都替换成了vue$之后,比如

// import 'vue';
import 'vue/dist/vue.esm.js';
登入後複製

时间竟然到了12s,也是把我吓了一跳。。。

然后我就把jquery,axios,vuex等等全部给替换掉了。。。大概优化到了9s左右,美滋滋,O(∩_∩)O~~

4.webpack3升级

本来是没第四点,刚刚看到公众号推出来一篇文章讲到升级到webpack3的一些新优点,比如Scope Hoisting(webpack2升级到webpack3基本上没有太大问题)。通过添加一个新的插件

// 2017-08-13配合最新升级的webpack3提供的新功能,可以使压缩的代码更小,运行更快
...
plugin : [
  new webpack.optimize.ModuleConcatenationPlugin(),
]
登入後複製

不过在添加这行代码之后,构建时间并没有太大变化,不过运行效率没试过,不知道新的效果怎么样

好了基本上感觉就是以上这些效果对项目的优化最大,虽然没有到网上说的那种只要3~4秒时间那么变态,不过感觉基本8,9秒的时间也可以了。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Angular 4中显示CSS样式

vue综合组件通信使用案例

以上是怎麼優化webpack配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Linux系統中GDM的工作原理及配置方法 Linux系統中GDM的工作原理及配置方法 Mar 01, 2024 pm 06:36 PM

Linux系統中GDM的工作原理及配置方法

PyCharm與PyTorch完美結合:安裝設定步驟詳解 PyCharm與PyTorch完美結合:安裝設定步驟詳解 Feb 21, 2024 pm 12:00 PM

PyCharm與PyTorch完美結合:安裝設定步驟詳解

了解Linux Bashrc:功能、設定與使用方法 了解Linux Bashrc:功能、設定與使用方法 Mar 20, 2024 pm 03:30 PM

了解Linux Bashrc:功能、設定與使用方法

MyBatis Generator配置參數解讀及最佳實踐 MyBatis Generator配置參數解讀及最佳實踐 Feb 23, 2024 am 09:51 AM

MyBatis Generator配置參數解讀及最佳實踐

win11系統如何配置工作小組 win11系統如何配置工作小組 Feb 22, 2024 pm 09:50 PM

win11系統如何配置工作小組

Flask安裝設定教學:輕鬆建置PythonWeb應用的利器 Flask安裝設定教學:輕鬆建置PythonWeb應用的利器 Feb 20, 2024 pm 11:12 PM

Flask安裝設定教學:輕鬆建置PythonWeb應用的利器

如何從駕駛艙Web使用者介面啟用管理訪問 如何從駕駛艙Web使用者介面啟用管理訪問 Mar 20, 2024 pm 06:56 PM

如何從駕駛艙Web使用者介面啟用管理訪問

Linux系統中如何設定和安裝FTPS Linux系統中如何設定和安裝FTPS Mar 20, 2024 pm 02:03 PM

Linux系統中如何設定和安裝FTPS

See all articles