為什么要優化打包?
- 項目越做越大,依賴包越來越多,打包文件太大
- 單頁面應用首頁白屏時間長,用戶體驗差
我們的目的
- 減小打包后的文件大小
- 首頁按需引入文件
- 優化 webpack 打包時間
優化方式
1、 按需加載
1.1 路由組件按需加載
1.2 第三方組件和插件。按需加載需引入第三方組件
1.3 對於一些插件,如果只是在個別組件中用的到,也可以不要在 main.js 里面引入,而是在組件中按需引入
2、生產環境關閉 sourceMap
3、代碼壓縮
- UglifyJS: vue-cli 默認使用的壓縮代碼方式,它使用的是單線程壓縮代碼,打包時間較慢
- ParallelUglifyPlugin: 開啟多個子進程,把對多個文件壓縮的工作分別給多個子進程去完成
4、CDN 優化
- 隨着項目越做越大,依賴的第三方 npm 包越來越多,構建之后的文件也會越來越大。
- 再加上又是單頁應用,這就會導致在網速較慢或者服務器帶寬有限的情況出現長時間的白屏。
1、將 vue、vue-router、vuex、element-ui 和 axios 這五個庫,全部改為通過 CDN 鏈接獲取,在 index.html 里插入 相應鏈接。
<head>
<link rel="stylesheet" href="https://cdn.bootcss.com/element-ui/2.0.7/theme-chalk/index.css" />
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.min.js"></script>
<script src="https://cdn.bootcss.com/vuex/3.1.0/vuex.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.2/vue-router.min.js"></script>
<script src="https://cdn.bootcss.com/element-ui/2.6.1/index.js"></script>
<!-- built files will be auto injected -->
</body>
2、在 webpack.config.js 配置文件
module.exports = {
···
externals: {
'vue': 'Vue',
'vuex': 'Vuex',
'vue-router': 'VueRouter',
'element-ui': 'ELEMENT',
'Axios':'axios'
}
},
3、卸載依賴的 npm 包,npm uninstall axios element-ui vue vue-router vuex
4、修改 main.js 文件里之前的引包方式
// import Vue from 'vue'
// import ElementUI from 'element-ui'
// import 'element-ui/lib/theme-chalk/index.css'
// import VueRouter from 'vue-router'
import App from './App.vue'
import routes from './router'
import utils from './utils/Utils'
Vue.use(ELEMENT)
Vue.use(VueRouter)
const router = new VueRouter({
mode: 'hash', //路由的模式
routes
})
new Vue({
router,
el: '#app',
render: h => h(App)
})
比較實用的方法: 按需加載,優化loader配置,關閉生產環境的sourceMap,CDN優化。
vue-cli已做的優化: 代碼壓縮,提取公共代碼,再優化空間不大。
根據項目實際需要和自身開發水平選擇優化方法,必須避免因為優化產生bug。