webpack-bundle-analyzer?插件配置使用方法
一、webpack-bundle-analyzer 是什么?
webpack-bundle-analyzer 是 webpack 的插件,需要配合 webpack 和 webpack-cli 一起使用。這個(gè)插件可以讀取輸出文件夾(通常是 dist)中的 stats.json 文件,把該文件可視化展現(xiàn),生成代碼分析報(bào)告,可以直觀地分析打包出的文件有哪些,及它們的大小、占比情況、各文件 Gzipped 后的大小、模塊包含關(guān)系、依賴項(xiàng)等,對(duì)應(yīng)做出優(yōu)化,從而幫助提升代碼質(zhì)量和網(wǎng)站性能。
二、安裝
# NPM npm install --save-dev webpack-bundle-analyzer # Yarn yarn add -D webpack-bundle-analyzer
三、使用方法
1. 作為插件使用
1. 配置 webpack.config.js 文件:
// webpack.config.js 文件
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports={
plugins: [
new BundleAnalyzerPlugin() // 使用默認(rèn)配置
// 默認(rèn)配置的具體配置項(xiàng)
// new BundleAnalyzerPlugin({
// analyzerMode: 'server',
// analyzerHost: '127.0.0.1',
// analyzerPort: '8888',
// reportFilename: 'report.html',
// defaultSizes: 'parsed',
// openAnalyzer: true,
// generateStatsFile: false,
// statsFilename: 'stats.json',
// statsOptions: null,
// excludeAssets: null,
// logLevel: info
// })
]
}2. 配置 package.json 文件
{
"scripts": {
"dev": "webpack --config webpack.dev.js --progress"
}
}3. 在命令行工具中輸入
npm run dev
按回車。此時(shí)會(huì)打開瀏覽器,你將看到項(xiàng)目資源包的交互式可視化樹形分析圖。

圖中占面積越大的文件,其文件的大小越大,部署到服務(wù)器之后,在瀏覽器中加載的時(shí)間越長,點(diǎn)擊左上角的像箭頭一樣的符號(hào)可以直接查看各個(gè)文件的大小。
該分析圖可以幫助我們:
- 了解 bundle 包中的真正內(nèi)容
- 找出哪些模塊尺寸最大
- 查找誤引入的模塊
- 優(yōu)化項(xiàng)目
最棒的是它支持縮小的 bundle 文件,它解析它們以獲得 bundle 文件模塊的實(shí)際大小,還顯示了它們的壓縮大小。
得到可視化的分析結(jié)果之后,接下來就對(duì)占比比較大或者依賴程度比較高的文件進(jìn)行優(yōu)化了。
4. 參數(shù)配置
new BundleAnalyzerPlugin(options?: object)
| 名稱 | 類型 | 描述 |
|---|---|---|
| analyzerMode | server / static / json / disabled | 默認(rèn)值:server。 在server 模式下,分析器將啟動(dòng) HTTP 服務(wù)器以顯示 bundle 報(bào)告。 在 static 模式下,將生成帶有 bundle 報(bào)告的單個(gè) HTML 文件。 在 json 模式下,將生成帶有捆綁報(bào)告的單個(gè) JSON 文件。 在 disable 模式下,您可以使用此插件通過將 generateStatsFile 設(shè)置為 true 來生成 Webpack Stats JSON 文件。 |
| analyzerHost | { String } | 默認(rèn)值:127.0.0.1。 在 server 模式下用于啟動(dòng) HTTP 服務(wù)器的主機(jī)。 |
| analyzerPort | { Number }或者 auto | 默認(rèn)值:8888。在 server 模式下用于啟動(dòng) HTTP 服務(wù)器的端口 |
| reportFilename | {String} | 默認(rèn)值:report.html。 在 static 模式下生成的捆綁報(bào)告文件的路徑。 它可以是絕對(duì)路徑,也可以是相對(duì)于 bundle 文件輸出目錄的路徑(在 webpack 配置中是 output.path)。 |
| reportTitle | { String | function } | 默認(rèn)值:返回打印當(dāng)前日期和時(shí)間的函數(shù)。 HTML 的 title 元素的內(nèi)容; 或獲取該內(nèi)容的 () => string 形式的函數(shù)。 |
| defaultSizes | stat / parsed / gzip | 默認(rèn)值:parsed。 默認(rèn)情況下在報(bào)告中顯示的模塊大小。 stat:這是文件的“輸入”大小,在進(jìn)行任何轉(zhuǎn)換(如縮?。┲啊V苑Q為“stat size”,是因?yàn)樗菑?Webpack 的 stats 對(duì)象中獲取的。 parsed:這是文件的“輸出”大小。 如果你使用的是 Uglify 之類的 Webpack 插件,那么這個(gè)值將反映代碼的縮小后的大小。 gzip:這是通過 gzip 壓縮運(yùn)行解析的包/模塊的大小。 |
| openAnalyzer | { Boolean } | 默認(rèn)值:true。 在默認(rèn)瀏覽器中自動(dòng)打開報(bào)告。 |
| genarateStatsFile | { Boolean } | 默認(rèn)值:false。 如果為 true,將在 bundle 輸出目錄中生成 webpack stats JSON 文件 |
| statsFilename | { String } | 默認(rèn)值:stats.json。 如果 generateStatsFile 為 true,表示將生成的 webpack stats JSON 文件的名稱。 它可以是絕對(duì)路徑,也可以是相對(duì)于bundle文件輸出目錄的路徑(在 webpack 配置中是 output.path)。 |
| statsOptions | null 或 { Object } | 默認(rèn)值:null。 stats.toJson() 方法的選項(xiàng)。 例如,您可以使用 source: false 選項(xiàng)從統(tǒng)計(jì)文件中排除模塊的源代碼。 |
| excludeAssets | { null | pattern | pattern[] } 其中 pattern 可以是 { String | RegExp | function } | 默認(rèn)值:null。 用于匹配將從報(bào)告中排除的資源名稱的模式。 如果 pattern 是一個(gè)字符串,它將通過 new RegExp(str) 轉(zhuǎn)換為 RegExp。 如果 pattern 是一個(gè)函數(shù),它應(yīng)該具有以下簽名 (assetName: string) => boolean 并且應(yīng)該返回 true 以排除匹配的資源。 如果提供了多個(gè)模式,資源應(yīng)至少匹配其中一個(gè)以被排除。 |
| logLevel | info / warn / error / silent | 默認(rèn)值:info。 用于控制插件輸出多少細(xì)節(jié)。 |
優(yōu)點(diǎn):簡單
缺點(diǎn):每次運(yùn)行打包命令時(shí),都在本地起一個(gè)端口號(hào)為8888的本地服務(wù)器,并自動(dòng)在瀏覽器中展示項(xiàng)目的分析結(jié)果。不夠靈活,并不是每次構(gòu)建都想看代碼分析!
2. 作為CLI的一個(gè)工具
如果你有一個(gè) webpack stats JSON 文件,你可以分析一個(gè)現(xiàn)有的包。
1、配置 webpack.config.js 文件:
可以使用 BundleAnalyzerPlugin 將 generateStatsFile 選項(xiàng)設(shè)置為 true
// webpack.config.js 文件
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports={
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: 'disabled', // 不啟動(dòng)展示打包報(bào)告的http服務(wù)器
generateStatsFile: true, // 是否生成stats.json文件
}),
]
}2、配置 package.json 文件
{
"scripts": {
"generateAnalyzFile": "webpack --profile --json > stats.json", // 生成分析文件
"analyz": "webpack-bundle-analyzer --port 8888 ./dist/stats.json" // 啟動(dòng)展示打包報(bào)告的http服務(wù)器
}
}3、在命令行工具中,先運(yùn)行 npm run generateAnalyzFile 命令,然后運(yùn)行 npm run analyz 命令。此時(shí)就可以看到分析結(jié)果了。
優(yōu)點(diǎn):稍微復(fù)雜,但是靈活
缺點(diǎn):每次運(yùn)行命令時(shí),都會(huì)在 dist 目錄下生成一個(gè) stats.json 文件。這個(gè)問題,可以將 generateStatsFile 屬性設(shè)置為 false,但是這樣就無法生成 stats.json 文件了。解決辦法:需要查看分析報(bào)告的時(shí)候設(shè)置為 true,其余時(shí)候設(shè)置為 false。
參考文章:
到此這篇關(guān)于webpack-bundle-analyzer 插件配置的文章就介紹到這了,更多相關(guān)webpack-bundle-analyzer 插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位
這篇文章主要介紹了JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位,本文給大家提到j(luò)s如何限制input輸入框只能輸入數(shù)字問題,需要的朋友可以參考下2019-11-11
Javascript實(shí)現(xiàn)秒表計(jì)時(shí)游戲
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)秒表計(jì)時(shí)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
從柯里化分析JavaScript重要的高階函數(shù)實(shí)例
這篇文章主要為大家介紹了從柯里化分析JavaScript重要的高階函數(shù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
layui 實(shí)現(xiàn)二級(jí)彈窗彈出之后 關(guān)閉一級(jí)彈窗的方法
今天小編就為大家分享一篇layui 實(shí)現(xiàn)二級(jí)彈窗彈出之后 關(guān)閉一級(jí)彈窗的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
JavaScript 懸浮窗口實(shí)現(xiàn)代碼
主要是window.onscroll的運(yùn)用2009-02-02
JavaScript利用normalizr實(shí)現(xiàn)復(fù)雜數(shù)據(jù)轉(zhuǎn)換
當(dāng)我們需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換以便拆分和維護(hù)時(shí),可以使用redux作者 Dan Abramov 編寫的normalizr來處理數(shù)據(jù),本文將為大家詳細(xì)講講其用法,感興趣的可以了解一下2022-07-07

