vue-router按需加载

vue的单页面(SPA)项目,必然涉及路由按需的问题。
以前我们是这么做的

1

2

//require.ensure是webpack里面的,这样做会将单独拉出来作为一个chunk文件

const Login = r => require.ensure( [], () => r (require('../component/Login.vue')));

但现在无Vue-router的官网看看,推荐这种方式:

1

2

//vue异步组件和webpack的【代码分块点】功能结合,实现了按需加载

const App = () => import('../component/Login.vue');

可是,很多情况下,我们这么写npm控制台直接报错,这是为什么呢?

1

Module build failed: SyntaxError: Unexpected token

原来是import这儿报错了,这就需要babel的插件了,vue-router官网上有一段提示:
如果您使用的是 Babel,你将需要添加 syntax-dynamic-import 插件,才能使 Babel 可以正确地解析语法。
至此,问题全部解决了。

如果使用vue-cli生成项目,很可能在babel-loader没有配置上面的插件,这时需要我们自己去安装此插件:

1

cnpm install babel-plugin-syntax-dymic-import --save-dev


然后修改js的loader部分:

1

2

3

4

5

6

7

{

test: /\.js$/,

loader:'babel-loader',

options:{

plugins:['syntax-dynamic-import']

},

},

  

增加了option选项,至此,能识别我们const App = () => import('../component/Login.vue');的语法了,页面出来了:

在打包的时候,发现我们如果只是这么写:const App = () => import('../component/Login.vue');出现的chunk包名字都是乱的,如果我们指定命名,该怎么办呢?webpack3提供了Magic Comments(魔法注释)

1

const App = () => import(/* webpackChunkName:'login'*/ '../component/Login.vue');

 这样我们就为打包出来的chunk指定一个名字,最终生成login.js的chunk包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
> 为什么我们要按加载 Vue 组件?使用 Vue Router 的 `component` 配置项的值为什么可以是一个函数?其具体实现方式是什么? 当我们的项目变得越来越大时,页面也逐渐增多,如果一开始便将所有组件都加载进来,那么页面会变得过于庞大,进而导致启动时间变长,用户体验也会受到影响。因此,我们希望只有在用户真正要使用某个组件时才加载它,这就是按加载组件的主要目的。 Vue Router 提供了 `component` 配置项用于指定当前路由所渲染的组件,它支持两种类型的值:组件对象和组件构造器(即通过 `Vue.extend(options)` 创建的组件),但它也可以是一个函数。这是因为 Vue Router 允许我们使用异步组件,而异步组件是通过函数形式来定义的。具体实现方式如下: ```javascript { path: '/async-component', component: () => import('./components/AsyncComponent.vue') } ``` 上述代码中,`AsyncComponent.vue` 是异步组件,它使用了 Webpack 提供的 `import()` 函数来懒加载组件,这个函数会异步加载代码块并且返回一个 Promise,Promise resolve 的值就是组件本身。在路由跳转时,如果当前组件尚未被加载,则会触发异步加载,直到组件被完整加载并编译后才会被渲染到页面上。 按加载组件是一种非常常见也非常实用的优化方式,它不仅可以缩短页面加载时间,也可以降低首次渲染的复杂度,提升用户的使用体验。同时,在实际开发中,我们也要考虑代码分割的问题,将代码分成多个较小的块,按加载。这样不仅可以减小网页加载的大小,同时也是打包优化的一部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值