Vue代碼分割懶加載的實現方法

什麼是懶加載html

懶加載也叫延遲加載,即在須要的時候進行加載,隨用隨載。vue

爲何須要懶加載webpack

在單頁應用中,若是沒有應用懶加載,運用webpack打包後的文件將會異常的大,形成進入首頁時,須要加載的內容過多,延時過長,不利於用戶體驗,而運用懶加載則能夠將頁面進行劃分,須要的時候加載頁面,能夠有效的分擔首頁所承擔的加載壓力,減小首頁加載用時web

如何與webpack配合實現組件懶加載vuex

一、在webpack配置文件中的output路徑配置chunkFilename屬性npm

 

output: {
    path: resolve(__dirname, 'dist'),
    filename: options.dev ? '[name].js' : '[name].js?[chunkhash]',
    chunkFilename: 'chunk[id].js?[chunkhash]',
    publicPath: options.dev ? '/assets/' : publicPath
},

chunkFilename路徑將會做爲組件懶加載的路徑babel

二、配合webpack支持的異步加載方法異步

  • resolve => require([URL], resolve), 支持性好
  • () => system.import(URL) , webpack2官網上已經聲明將逐漸廢除, 不推薦使用
  • () => import(URL), webpack2官網推薦使用, 屬於es7範疇, 須要配合babel的syntax-dynamic-import插件使用, 具體使用方法以下
npm install --save-dev babel-core babel-loader babel-plugin-syntax-dynamic-import babel-preset-es2015

  

use: [{
    loader: 'babel-loader',
    options: {
    presets: [['es2015', {modules: false}]],
    plugins: ['syntax-dynamic-import']
    }
}]

引言ui

而在webpack > 2的時代,vue作代碼分割懶加載更加的easy,不須要loader,不須要require.ensure。spa

import解決一切。

分割層級

Vue代碼分割懶加載包含以下幾個層級:

      一、 組件層級分割懶加載

      二、 router路由層級

      三、 Vuex 模塊

組件層級代碼分割

//全局組件
Vue.component('AsyncComponent', () => import('./AsyncComponent'))
 
//局部註冊組件
new Vue({
 // ...
 components: {
 'AsyncComponent': () => import('./AsyncComponent')
 }
})
 
// 若是不是default導出的模塊
new Vue({
 // ...
 components: {
 'AsyncComponent': () => import('./AsyncComponent').then({ AsyncComponent }) => AsyncComponent
 }
})

路由層級代碼分割

const AsyncComponent= () => import('./AsyncComponent')
 
new VueRouter({
 routes: [
 { path: '/test', component: AsyncComponent}
 ]
})

Vuex 模塊代碼分割,vuex中有動態註冊模塊方法,同時也是加上import

const store = new Vuex.Store()
 
import('./store/test').then(testModule => {
 store.registerModule('test', testModule)
})

總結

在通常項目中,咱們按照router和components層面分割(或者只使用router分割)就足夠了。大型項目可能三者都會用到,但用法都很簡單

相關文章
相關標籤/搜索