最近在研究vue的按需加载,好奇怪,之前好像并没有看到vue的官文里面有这一部分,是我看差了吗hahaha~尬笑~
其实只需要看vue-router官文就可以了,里面有懒加载的讲解,并且附带了详细内容的连接。一个一个看过去,很容易操作了。
于是我看了一下。做个记录,防止忘记了又要重新看一遍。
首先是使用的vue-cli构建的简单项目
把多余的东西都删掉,剩下一个HelloWord.vue
然后修改目录接口,新建一个pages目录,把HelloWord.vue放进去,components目录新建两个文件,test1.vue test2.vue。pages目录新建一个Page2.vue
那么就用这四个文件来测试一下
pages目录下:
HelloWord.vue
Page2.vue
components目录下:
test1.vue
test2.vue
修改路由router.js内容为:
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.vue
<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")
然后打包就可以看到效果了。
打包后的文件:
那些[number].[hash].js的文件就是页面分块后的文件了,加载页面时出了那些公共模块,会对应只加载响应页面模块。并且缓存起来。所以很大程度上优化了页面的初始加载速度。
最后Page2.vue, test1.vue, test2.vue的内容就不贴了,其实是很简单是实例来的。只是为了测试按需加载随便写的而已。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。