最近在研究vue的按需加載,好奇怪,以前好像並無看到vue的官文裏面有這一部分,是我看差了嗎hahaha~尬笑~html
其實只須要看vue-router官文就能夠了,裏面有懶加載的講解,而且附帶了詳細內容的鏈接。一個一個看過去,很容易操做了。
因而我看了一下。作個記錄,防止忘記了又要從新看一遍。
首先是使用的vue-cli構建的簡單項目
把多餘的東西都刪掉,剩下一個HelloWord.vue
而後修改目錄接口,新建一個pages目錄,把HelloWord.vue放進去,components目錄新建兩個文件,test1.vue test2.vue。pages目錄新建一個Page2.vue
那麼就用這四個文件來測試一下vue
pages目錄下:
HelloWord.vue
Page2.vuewebpack
components目錄下:
test1.vue
test2.vueweb
修改路由router.js內容爲:vue-router
import Vue from 'vue' import Router from 'vue-router' // 這裏用到了webpack2的import()它會返回一個promise let HelloWorld = () => import('@/pages/HelloWorld') let Page2 = () => import('@/pages/Page2') Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld }, { path: '/page2', name: 'Page2', component: Page2 } ] })
而後改寫HelloWord.vue和Page2.vue的組件引入形式,也是使用import(),
HelloWord.vuevue-cli
<template> <div class="hello"> <h1>HOME</h1> <router-link to="/page2">page2</router-link> <test1 :value="a">{{a}}</test1> </div> </template> <script> export default { name: 'HelloWorld', components: { 'test1': () => import('../components/test1') }, data () { return { a: 'a test value.' } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> h1, h2 { font-weight: normal; } </style>
最後是根據webpack的分塊加載形式修改webpack設置
在根目錄下的build/webpack.prod.confj.js
添加new webpack.optimize.CommonsChunkPlugin("common.js")promise
而後打包就能夠看到效果了。
打包後的文件:緩存
那些[number].[hash].js的文件就是頁面分塊後的文件了,加載頁面時出了那些公共模塊,會對應只加載響應頁面模塊。而且緩存起來。因此很大程度上優化了頁面的初始加載速度。ide
最後Page2.vue, test1.vue, test2.vue的內容就不貼了,實際上是很簡單是實例來的。只是爲了測試按需加載隨便寫的而已。測試