vue路由懶載入

smile發表於2018-03-11

vue的路由懶載入

我們可以把不同路由對應的元件分割成不同的程式碼塊,然後當路由被訪問的時候才載入對應元件。

  1. component可以是一個箭頭函式,我們可以使用動態 import語法來定義程式碼分塊點;
  2. 如果想在network裡面看到動態載入的元件名字,可以加webpackChunkName;
  3. 同時要在webpack.base.conf.js裡面的output裡面的filename下面加上chunkFileName

程式碼

// router裡面的index.js


import Vue from `vue`
import Router from `vue-router`


Vue.use(Router)

export default new Router({
  routes: [
    {
      path: `/`,
      name: `home`,
      /* 
       *  使用動態元件,component可以是一個箭頭函式
       *  @表示src目錄
       *  如果想在network裡面看到動態載入的元件名字,可以加webpackChunkName,同時要在webpack.base.conf.js裡面的output裡面的filename下面加上chunkFileName
       *  network裡面動態載入模組名稱
       */
      
      component: () => import(/* webpackChunkName: `home` */`@/pages/Homes`)
    
      
    },
    {
      path: `/todos`,
      name: `Todos`,
      component: () => import(/* webpackChunkName: `todo` */`@/pages/Todos`)
    }
  ]
})

注意 上面的@代表當前src目錄,具體可以去參考webpack的配置

webpack.base.conf.js裡面新增 chunkFilename: `[name].js`

output: {
  path: config.build.assetsRoot,
  filename: `[name].js`,
  // 需要配置的地方
  chunkFilename: `[name].js`,
  publicPath: process.env.NODE_ENV === `production`
    ? config.build.assetsPublicPath
    : config.dev.assetsPublicPath
}

分析

建立了home和todos兩個元件使用了路由懶載入,配置好之後我們執行npm run dev來執行專案,開啟network之後重新整理一下,我們會發現載入了home.js,我們會發現和上面定義的webpackChunkName名字一樣,同時點todos會載入todo.js。這就是路由懶載入的簡單使用。

其他

在main.js裡面專案的入口我們可以使用template的語法,也可以使用render函式

new Vue({
  el: `#app`,
  router,
  components: { App },

  /*
  * 這裡使用的template的語法
  * 也可以使用render函式,直接return一個html結構
  */
  // template: `<App/>`
  render() {

    return (
      <div>
        <App></App>
      </div>
    )
  }

  
})

相關文章