美文网首页
webpackDevServer解决单页面应用(spa)路由问题

webpackDevServer解决单页面应用(spa)路由问题

作者: 喜剧之王爱创作 | 来源:发表于2020-09-04 18:40 被阅读0次
wow.jpg

写在前面

我们知道,现在比较热门的俩框架React/Vue都是属于单页面应用,也就是所谓的SPA,其本质就是通过路由的不同来加载不同的组件,然后插入到html页面的根元素中,行程了一种,切换页面但不需要刷新页面的现象,其优势有很多,现在也被广泛使用。当然现在我们一般使用社区的脚手架做项目的构建,你可能不知道,其实单页面应用的路由切换是需要我们进行一些相关的配置的。不知道你是否遇到过这种情况,当你使用history的路由模式时,部署到服务器上,一刷新就会出现404的情况,这时就需要后台来配合做一个重定向了,其出现的原因是,我们刚才说,前端切换url实际上是切换前端的路由这时候,只有你的页面在index.html下,他才会保持路由的切换,不然就会变成接口的请求,就像传统的请求那样,而SPA只需要返回一次html和js就可以了,其他的时间,都是在往html中注入不同页面的js达到页面切换的效果。所以,就需要后端在每次路由匹配下的url都返回一个html,而不是做对应的请求。
实际上,不过是线上有这样的问题,如果你是使用webpack搭建的原生项目,也是会遇到类似的问题的,因为社区的脚手架都为我们做过了相应的处理,所以你很少在本地遇到,那么今天我们就来说一下,如何使用devServer解决本地出现的路由问题,我们先来搭建一个项目,大家也可以使用自己的现有项目,我使用之前的demo

使用devServer解决单页面应用中的路由问题

这里我使用react来演示,我搭建了一个简单的路由页面如下

import React from 'react'
import ReactDom from 'react-dom'
import { BrowserRouter, Route } from 'react-router-dom'
import Home from './home'
import List from './list'

class App extends React.PureComponent{
    render () {
        return (
        <BrowserRouter>
            <Route path="/" exact component={Home}/>
            <Route path="/list" component={List}/>
        </BrowserRouter>
        )
    }
}

ReactDom.render(<App/>, document.getElementById('root'))

其中HomeList分别是两个react页面,我们代码的意思是,根路径下切换Home页面,'list'下切换List页面,我们启动项目,访问根路径是可以访问到的,但是当我们访问'/list'的时候,你会发现下面的错

pageerr.png
这是因为,就像上面说的,devServer把我们请求的url当成了一个后端的接口或者页面,我们提到过,在线上的话,我们需要使用服务器的重定向功能,那么我们在devServer中如何解决这一问题呢?
devServer.historyApiFallback

在webapack devServer为了我们提供了historyApiFallback这个API,我们开启他试一试,然后重启试试

historyApiFallback: true

这样我们的问题就解决了,其原理也是和服务端一样的,这个时候,当你使用netWork做监控的时候,每次无论你输入什么地址都是返回的index.html那个文件了。当然关于historyApiFallback的配置项也有很多,下面我们简单按照官网上的配置项,对一些配置项做解答
我们看官网他的配置可以不是一个布尔值而是一个匹配规则

history.png
那么我们也试着写一下这样的方式。
historyApiFallback: {
    rewrites: [
        {from: /a.html/, to: '/index.html'}
    ]
},

意思是,我们访问a.html的时候,会重定向到index.html上,启动项目试一下,我们发现,访问a.html的时候,不再报错,倒是页面是空白的,不过我们查看源代码,会发现,他其实是index.html的内容,这说明我们的配置是成功了的,至于为什么页面空白,是因为我们在index.html并没有为这个a的路径注册对应的路由和组件,一般我们配置成true就可以。
如果你想往深处去探索,可以访问https://github.com/bripkens/connect-history-api-fallback,因为这个配置项的底层就是connect-history-api-fallback

写在最后

这里我们还要强调一下,historyApiFallback只在本地生效,如果你在服务端也遇到了这个问题,那么是需要在服务端做类似的配置的!

相关文章

  • webpackDevServer解决单页面应用(spa)路由问题

    写在前面 我们知道,现在比较热门的俩框架React/Vue都是属于单页面应用,也就是所谓的SPA,其本质就是通过路...

  • 6 VUE路由

    vue-> SPA应用,单页面应用(引入vue-router.js) 路由嵌套(多层路由): 路由其他信息:

  • vue路由

    vue路由--- SPA应用,单页面应用vue-resouce 交互vue-router 路由根据不同url地址...

  • SPA及其优缺点

    SPA:单页面web应用,一般整个应用只有一个html页面,通过前端路由实现无刷新跳转。 Vue就是SPA应用的典...

  • SPA及其优缺点

    SPA:单页面web应用,一般整个应用只有一个html页面,通过前端路由实现无刷新跳转。 Vue就是SPA应用的典...

  • Vue首屏加速-路由懒加载

    Vue-spa项目由于单页面应用的特性都会面临首屏加载速度的问题。解决这个问题的途径也有很多。但是路由懒加载绝对是...

  • vue路由hash和history

    一、路由原理 1、SPA SPA,即单页面应用(Single Page Application)。就是只有一张 w...

  • React路由配置

    目前前端项目都是SPA项目,而单页应用就少不了路由配置,因为单页应用的页面不会刷新页面,而是根据路由的切换来更换页...

  • 2018-09-25vue.router路由和路由的嵌套、路由的

    一、路由 路由:vue-router 带三方工具库创建单页面应用 spa (single page appli...

  • 路由 路由的传参 路由的嵌套 axios

    路由:vue-router 带三方工具库创建单页面应用 spa (single page application)...

网友评论

      本文标题:webpackDevServer解决单页面应用(spa)路由问题

      本文链接:https://www.haomeiwen.com/subject/vaazsktx.html