【進擊的Vue(四)】webpack打包優化
不要讓自己的上限成為你的底線
本文主要講以下內容。webpack-bundle-analyzer
佔用統計檢視所有的檔案佔用情況,使用線上cdn
替換本地匯入的包,使用clean-webpack-plugin
清除webpack打包殘留
。
webpack-bundle-analyzer資源佔用統計
使用webpack-bundle-analyzer
外掛檢視專案檔案資源佔用情況。效果如下圖所示:
先上外掛,安裝:
npm i webpack-bundle-analyzer -D
複製程式碼
然後配置webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin({
// 8888是預設埠號
analyzerPort: 8888,// host地址
analyzerHost: '127.0.0.1',/**
* 'server','static','json','disabled'
* server => http服務顯示
* static => 靜態檔案
* json => 將分析結構以 json 形式輸出
* disabled => 不做任何行為
* 這裡按照我的習慣是在開發的時候自動開啟瀏覽器檢視統計,打包的時候輸出在dist下
*/
analyzerMode: 'static',// analyzerMode為static或json時候的輸出位置
reportFilename: 'report.html',/**
* 'stats','parsed','gzip'
* stats => 開發環境中
* parsed => 打包後
* gzip => gzip後
*/
defaultSizes: 'parsed',// 是否自動開啟統計頁面
openAnalyzer: false,// generateStatsFile: false,// 如果為true,則Webpack Stats JSON檔案將在bundle輸出目錄中生成。
// statsFilename: 'stats.json',
/**
* 配置
* https://webpack.js.org/configuration/stats/#stats-options
*/
statsOptions: null,/**
* 'info','warn','error','silent'
*/
logLevel: 'info',// 用於排除分析一些檔案
excludeAssets: null
})
]
}
複製程式碼
然後啟動測試出現上面那種圖就成功了,然後接下來優化。
使用在cdn線上資源
值得注意的是,有些外掛會有提供開發環境的cdn資源,這些帶開發環境的cdn可以提示你一些開發中的錯誤(雖然這些錯誤毫無影響。。),可以根據自己的取捨去選擇。
編輯你的預設index.html
模板,加入線上資源:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vuex/3.2.0/vuex.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.2.0/vue-router.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.9.4/qs.min.js"></script>
</body>
</html>
複製程式碼
然後配置webpack.config.js
外部擴充套件,不知道匯入的外掛函式名可以開啟原始碼看看。
module.exports = {
...
// 外部擴充套件。
externals: {
vue: 'Vue',vuex: 'Vuex','vue-router': 'VueRouter',axios: 'Axios',qs: 'Qs'
}
...
}
複製程式碼
配置完畢,直接一鍵解除安裝專案中的庫吧:
npm uninstall vue vuex vue-router axios qs
複製程式碼
然後重新啟動專案,專案這時候開始報錯,不要緊,把原先import進來的vue、vuex-vue-router、axios、qs
全都註釋掉。比如main.js
:
...
- import Vue from 'vue';
+ // import Vue from 'vue';
import App from './App.vue';
import store from './store';
import router from './router';
- import axios from 'axios';
+ // import axios from 'axios';
import * as filters from './filter';
import './less/common.less';
Vue.prototype.$http = axios;
...
複製程式碼
如果還有報錯請檢查是否還有其它地方的檔案是import進入的
clean-webpack-plugin打包清除原有的dist資料夾
clean-webpack-plugin
用於刪除清理你生成的資料夾,在最新的版本中預設清除dist資料夾
,而在舊版本的使用方法會在下方註釋中提到。
安裝clean-webpack-plugin
npm i clean-webpack-plugin -D
複製程式碼
修改webpack.config.js
檔案。
const CleanWebpackPlugin = require('clean-webpack-plugin').CleanWebpackPlugin;
...
module.export = {
plugins: [
/**
* 舊版本需要帶入資料夾名稱
* new CleanWebpackPlugin(['dist'])
*/
new CleanWebpackPlugin()
]
}
複製程式碼
文章到這裡就結束,vue專案搭建會上傳到GitHub,需要的朋友可以自行拉取,後面的文章會以此為基礎。如果有需要優化的地方或者有更好的建議可以在評論區留言(假裝很多人看)。 Github倉庫:github.com/heiyehk/web…
程式碼分支在: /tree/dev/20200625-webpackBuildOptimize