webpack優化不完全指南

2021-08-14 15:13:00 字數 3457 閱讀 3809

最基本的乙個webpack配置

const webpack = require('webpack');

const htmlwebpackplugin = require('html-webpack-plugin');

const extracttextplugin = require('extract-text-webpack-plugin');

module.exports = ,

devtool: 'none',

devserver: ,

module:

}, }, ],})}

}]

},plugins: [

new webpack.bannerplugin(),

new htmlwebpackplugin(),

new webpack.optimize.occurrenceorderplugin(),

new webpack.optimize.uglifyjsplugin(),

new extracttextplugin("style.css")

]};

接下來基於這份配置進行乙個優化:

首先我們得區分開發環境、生產環境以及測試環境(這個在國內用的公司少)實現思路(參考vue-cil),通用配置可以設定乙個base檔案然後exports,在其他的配置檔案中require進來。

上面這個配置中new webpack.optimize.uglifyjsplugin()就可以放入webpack.prod.conf.js中,因為**壓縮醜化只需要在生產環境中使用,在開發過程開啟的話,不僅編譯時間加長還不利於除錯。

module與entry、output這個就可以放到webpack.base.cong.js檔案中,這些配置是通用的不管在生產環境還是開發環境中都是用得到的。

devserver則是在開發過程中需要啟動乙個伺服器然後再開啟熱替換功能。

include: [resolve('src'), resolve('test')]

這樣loader載入器就只會匹配src/與/test目錄下的檔案,至於node_modules目錄下的檔案則跳過,假如沒加這一限制條件的話,node_modules下那麼多的js檔案,想想都覺得恐怖,並且別人發布出來的包檔案一般都是經過babel轉成es5標準的。

alias:

這樣當webpack遇到import('@***')的時候就會直接在src/目錄下去尋找,能節省不少的目錄查詢時間

多頁面優化

當我們的專案是多個頁面的時候,我們需要用到htmlwebpackplugin外掛程式,

for(let i = 0; i< html.length; i++) ,

chunkssortmode: 'dependency',

chunks: ['manifest', 'vendor', cur]

})))}

有多少個頁面就push多少個htmlwebpackplugin進去,至於頁面的獲取我們可以通過walk-sync來做到,通過獲取目錄下的入口檔案來判斷有多少個頁面存在。

我在優化過程中遇到個坑,當webpack從2.x公升級為3.x的時候,

compilation.getstats().tojson()

這個函式的執行時間會大大加長,我看到其實在issue裡頭有人提出來了,不過作者並沒有給合併到master中去。還有點就是:當頁面是多頁面的時候每一次小的改動都會把所有的html檔案重新生成一次,針對這兩個優化我在githubfork了下html-webpack-plugin,並發布了html-webpack-plugin-multihtml。我們的專案一共是有49個頁面之前rebuild是花費5-7s ,優化後保持在1s左右。

提取公共**commonschunkplugin

有些類庫如utils, bootstrap之類的可能被多個頁面共享,最好是可以合併成乙個js,而非每個js單獨去引用。這樣能夠節省一些空間。這時我們可以用到commonschunkplugin,我們指定好生成檔案的名字,以及想抽取哪些入口js檔案的公共**,webpack就會自動幫我們合併好。

new webpack.optimize.commonschunkplugin(

}),

這個是針對多頁面優化的,commonschunkplugin會自己計算當乙個類庫被引用的次數超過8次,就把它打包至vendor中,這樣就不必全打包至乙個index.js裡頭

externals提取常用庫

externals 配置選項提供了「從輸出的 bundle 中排除依賴」的方法。相反,所建立的 bundle 依賴於那些存在於使用者環境(consumer's environment)中的依賴。

externals主要是防止將某些import的包打包到bundle中,而是在執行時(runtime)再去從外部獲取這些擴充套件依賴

配置也挺簡單的接下來貼下**:

index.html中引入
webpack.config.js中配置

externals:

這樣就能在**中通過import引用了:

import $ from 'jquery';
uglifyplugin多執行緒壓縮**

在webpack的預設情況下,都是單執行緒跑的,有個叫webpack-uglify-parallel的外掛程式,它能夠充分呼叫計算機的資源,利用計算機的多核特性進行**壓縮。

使用方法也挺簡單的,把之前webpack.prod.conf.js中的

new webpack.optimize.uglifyjsplugin(,

comments: false

}),

替換為

var os = require('os');

var uglifyjsparallelplugin = require('webpack-uglify-parallel');

module.exports = )

]}

即可github位址:webpack-uglify-parallel

// 省略其餘配置

module: ]},

plugins: [

id: 'less',

loaders: ['css!less'],

cache: true,

verbose: true

})]

我在優化我們專案的webpack遇到了兩個坑,乙個就是上面提到的,webpack2公升級3編譯時間增多,另乙個就是devserver在低版本安卓機型上跑步起來。devserver這個使用"webpack-dev-server": "2.7.1"即可,因為2.9.x版本使用的是es6的寫法安卓4.1以下不支援,ie9以下也不支援。

SVN不完全指南 介紹

為什麼需要svn版本控制軟體 解決之道 scm 軟體配置管理 所謂的軟體配置管理實際就是對軟體源 進行控制與管理 cvs 元老級產品 vss 入門級產品 clearcase ibm公司提供技術支援,中堅級產品 svn 主流產品 什麼是svn 特點 操作簡單,入門容易 支援跨平台 window lin...

不完全型別

c 允許在乙個 檔案中存放多個類,但這樣往往不便於類的管理,所以一向是提倡乙個檔案中只存放乙個類。不過呢,隨著類規模的不斷膨脹,乙個檔案中存放乙個類也有些顯得臃腫,或者是在某個角度上不便於 的組織。因此,c 2.0中引入了不完全型別的概念,即啟用了新的修飾符partial。借助該修飾符,我們可以在多...

不完全型別

不完全型別指 函式之外 型別的大小不能被確定的型別 總結一下,c的型別分為 結構體的宣告就是乙個不完全型別的典型例子。struct woman tag struct man tag struct woman tag 這樣是沒問題的。如果將man tag結構中的struct woman tag wif...