vue中的vendor.js文件過大問題及解決
vue vendor.js文件過大問題
1. cdn 引入
index.html中cdn的方式引入vue、vuex、axios、element-ui、vue-router等包,代碼如下:
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <script src="https://cdn.bootcss.com/vue/2.6.11/vue.min.js"></script> <script src="https://unpkg-com/[email protected]/dist/vuex.js"></script> <script src="https://cdn.bootcss.com/vue-router/3.2.O/vue-router.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.min.js"></script>
如果是內網開發:cdn下載對應版本放入public下(例:public–>minJs–>cdn靜態文件)
<%if (process.env.NODE_ENV === 'production'){ %>//此處為外網cdn,具體根據公司需求 <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <script src="https://cdn.bootcss.com/vue/2.6.11/vue.min.js"></script> <script src="https://unpkg-com/[email protected]/dist/vuex.js"></script> <script src="https://cdn.bootcss.com/vue-router/3.2.O/vue-router.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.min.js"></script> <%} else {%> <script src="./minJs/axios.min.js"></script> <script src="./minJs/vue.min.js"></script> <script src="./minJs/vuex.js"></script> <script src="./minJs/vue-router.min.js"></script> <script src="./minJs/element-ui.min.js"></script> <%}%>
註意:cdn版本與package版本一直,否則會出現報錯,且cdn引用順序又要求(例:element要在vue下面)否則報錯:如下圖
2. 在使用vue等包的地方,註釋掉import引入
在所有使用vue的地方註釋掉引入的vue等包,但是Vue.use(axios)、Vue.use(VueRoter)、Vue.use(vuex)等依然要使用,除瞭Vue.use(ElementUI), 如果加上這句話,還是會打包element-ui到vendor.js文件中
在main.js
在store文件加中的index.js
在api/request.js文件中
在router/index.js文件中
3. 打包忽視掉vue等包
在vue.config.js
chainWebpack: (config) => { if (isPro) { //isPro 本人判斷是否產線 config.externals={ 'vue':'vue', 'vuex':'Vuex', 'vue-router':'VueRouter', 'element-ui':'ELEMENT', 'axios':'axios' } config.plugin("extract-css").tap((args) => [ { filename: `css/[name].${Version}.css`, chunkFilename: `css/[name].${Version}.css`, }, ]); } },
第四步、如果打包後的文件還是比較大,就采用路由懶加載的方式加載路由
vue打包降低vendors.js文件大小
vue打包項目優化
減少vendors.js文件的大小
我們在打包vue項目的時候經常會遇到打包後的文件中vendors.js文件特別大,這個文件中的內容主要是我們項目中引入的第三方插件js文件,我們可以更改webpack的配置文件來排除這些第三方插件,然後在index.html文件中通過增加cdn引入的方式來優化我們的代碼,使的我們的項目更快的加載。
方法:
找到vue項目的配置文件,如果使用的是vue-cli4腳手架,可以在項目的根目錄下創建一個vue.config.js的配置文件,然後在配置文件中增加如下代碼。
module.exports = { configureWebpack: config => { externals: { vue: 'Vue', // 排除Vue文件 'vue-router': 'VueRouter', // 排除VueRouter moment: 'moment', // 排除moment組件 一個時間格式化插件 axios: 'axios', // 排除axios組件 'element-ui': 'ELEMENT', // 排除element-ui組件,這裡要使用大寫 echarts: 'echarts', // 排除echarts組件 qs: 'Qs' // 排除qs組件 } } }
externals是webpack的一項配置項, 官方解釋:配置選項提供瞭「從輸出的 bundle 中排除依賴」的方法。相反,所創建的 bundle 依賴於那些存在於用戶環境(consumer’s environment)中的依賴。此功能通常對 library 開發人員來說是最有用的,然而也會有各種各樣的應用程序用到它。
換句話說就是防止將某些 import 的包(package)打包到 bundle 中。也就是打包時不打包這些文件。
然後在public目錄下的index.html文件裡增加cdn的靜態資源路徑就ok瞭。
壓縮文件
這裡的壓縮js不是指的代碼的壓縮,而是使用webpack的CompressionPlugin插件進行gzip壓縮,首先安裝插件
npm i -D compression-webpack-plugin
然後在vue.config.js文件中進行設置,找
// 引入插件 const CompressionPlugin = require('compression-webpack-plugin'); module.exports = { configureWebpack: config => { return { // 插件配置 plugins: [ // 實例化插件 new CompressionPlugin({ // 需要壓縮的文件後綴 test: /\.js$|\.html$|\.css$|\.png$|\.jpg$|\.jpeg$|\.gif$/, // 壓縮後的文件 filename: '[path][base].gz', // 超過次大小的文件進行處理 threshold: 102400, // 是否刪除原資源 deleteOriginalAssets: false }) ] } } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。