vue項目優化之按需加載組件-使用webpack require.ensure

vue項目優化之按需加載組件-使用webpack require.ensure

 

使用 vue-cli構建的項目,在 默認狀況下 ,執行 npm run build  會將全部的js代碼打包爲一個總體,html

打包位置是 dist/static/js/app.[contenthash].js   
vue

相似下面的路由代碼 webpack

router/index.js  路由相關信息,該路由文件引入了多個 .vue組件web

  1. import Hello from '@/components/Hello'
  2. import Province from '@/components/Province'
  3. import Segment from '@/components/Segment'
  4. import User from '@/components/User'
  5. import Loading from '@/components/Loading'

執行 npm run build 會打包爲一個總體 app.[contenthash].js ,這個文件是很是大,可能幾兆或者幾十兆,加載會很慢vue-router


因此咱們須要分模塊打包,把咱們想要組合在一塊兒的組件打包到一個 chunk塊中去vue-cli

分模塊打包須要下面這樣使用 webpack的 require.ensure,而且在最後加入一個 chunk名,npm

相同 chunk名字的模塊將會打包到一塊兒app

  1. const Province = r => require.ensure([], () => r(require('@/components/Province.vue')), 'chunkname1')
  2. const Segment = r => require.ensure([], () => r(require('@/components/Segment.vue')), 'chunkname1')
  3. const Loading = r => require.ensure([], () => r(require('@/components/Loading.vue')), 'chunkname3')
  4. const User = r => require.ensure([], () => r(require('@/components/User.vue')), 'chunkname3')

根據 chunname的不一樣, 上面的四個組件, 將會被分紅3個塊打包,最終打包以後與組件相關的js文件會分爲3個 (除了app.js,manifest.js, vendor.js)優化

分模塊打包以後在 dist目錄下是這樣的, 這樣就把一個大的 js文件分爲一個個小的js文件了,按需去下載,其餘的使用方法和import的效果同樣ui

參考vue-router官方文檔: https://router.vuejs.org/zh-cn/advanced/lazy-loading.html

相關文章
相關標籤/搜索