webpack解决单页面路由问题

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>html template</title>
  </head>
  <body>
    <div id=‘root‘></div>
  </body>
</html>

index.js

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

class App extends Component{
  render() {
    return (
      <BrowserRouter>
        <div>
          <Route path=‘/‘ exact component={Home} />
          <Route path=‘/list‘ component={List} />
        </div>
      </BrowserRouter>
    )
  }
}
ReactDom.render(<App/>, document.getElementById(‘root‘));

home.js

import React, {Component} from ‘react‘;

class Home extends Component{
  render() {
    return (
      <div>home</div>
    )
  }
}

export default Home;

list.js

import React, {Component} from ‘react‘;

class List extends Component{
  render() {
    return (
      <div>list</div>
    )
  }
}

export default List;

我们运行npm run dev ("webpack-dev-server --config ./build/webpack.common.js")。访问localhost:8080/访问没有问题,访问localhost:8080/list说找不到这个页面,这是为什么。

原因是当你这么去访问一个网址的时候,后端,也就是现在的webpackDevServer会因为访问的是后端的一个list页面。但是我们dist下只有index.html,并没有list这个页面。所以提示页面不存在,这是前端做单页应用的时候经常会遇到的一个问题。在webpackDevServer里面要解决这个问题,打开webpack官网。https://webpack.js.org/configuration/dev-server#devserverhistoryapifallback

我们这里只要配置一个historyApiFallback就可以了

module.exports = {
  devServer: {
    historyApiFallback: true
  }
};

这样我们重新访问localhost:8080/list的时候就没有问题了。他的原理是后端服务器如果发现并没有这个/list地址。就会偷摸的转化成根路径的请求,所以不管请求什么地址,都会请求index.html,里面有main.js,也就是我们的业务代码,这里面的路由就能正常的生效。

这里面还可以有其他的配置

historyApiFallback: {
  rewrites: [
    { from: /abc.html/, to: ‘/index.html‘ },
  ]
},

这里面如果访问的是abc.html的时候,转化成index.html。所以这里填一个true,等价于from任何路劲,都to到index.html上。

原文地址:https://www.cnblogs.com/wzndkj/p/10885417.html

时间: 2024-07-31 13:18:29

webpack解决单页面路由问题的相关文章

详解单页面路由的几种实现原理(附demo)

前言 路由是每个单页面网站必须要有的,所以,理解一下原理,我觉得还是比较重要的. 本篇,基本不会贴代码,只讲原理,代码在页底会有githup地址,主意,一定要放在服务本地服务器里跑(因为有ajax), 希望能帮到你. 众所周知单页面网站的路径跳转全是通过js来控制的,下面咱们来讲讲 第一种:url完全不动型 这一种的情况是url完全不动,即你的页面怎么改变,怎么跳转url都不会改变 这种情况的原理 就是纯ajax拿到页面后替换原页面中的元素, 这种情况没什么好讲的,好的一言不和上代码    de

AngularJS单页面路由配置恩,理解了就很简单啦

利用route实现单页面跳转功能 利用angularJS开发流程 1)配置好angularJS开发环境 2)利用 yo angular projectname创建项目目录 3)删除掉系统自动生成的一些自己工程不需要的页面和脚本 4)修改index.html,在 <!-- Add your site or application content here --> 以上注释下面写自己的样式内容,关键是 <div class="container-fluid" id=&qu

详解单页面路由的几种实现原理

路由是每个单页面网站必须要有的,本篇基本不会天贴代码,只讲原理,代码在页面底会有github地址,注意,一定要放在本地服务器里跑(因为有AJAX) 众所周知,单页面网站的路径跳转全是通过JS来控制的,下面说说 第一种:URL完全不动型 这一种的情况是URL完全不动,即你的页面怎么改变,怎么跳转URL都不会改变,这种情况的原理就是纯AJAX拿到页面后替换原页面的元素,这种情况没什么好说的,demo在最底下 第二种:带hash(#)型 这种类型的优点就是刷新页面,页面也不会丢 实现原理: 小明说:如

利用hash或history实现单页面路由

目录 在chrome(版本 70.0.3538.110)测试正常编写涉及:css, html,js, node(koa) 在线演示codepen html代码 <div class="hash"> <div class="title">hash 路由</div> <a href="#/one">hash 1</a> <a href="#/two">hash

记 history.replaceState方法一次应用 解决单页面应用刷新切换页面问题

恩,以前就知道history api 新加了几个方法但是没怎么研究过,今天碰到了一个小问题,用history完美解决了,很兴奋,记录下 首先说下我遇到的问题场景: 现在有两个页面 A,B A页面时提交信息页面 B页面是结果页 并且 A,B 页面是同一个html文件内用 js 模板 动态渲染的, 那么当结果页面动态渲染出来以后,每次刷新就会显示A页面,其实,我更想显示B页面对吧,肯定不想让用户再次提交一次,而且大多数情况下我其实并不希望用户直接进入提交信息页面的,因为如果是支付的话,会造成二次支付

移动前端,单页面路由的一些思考

树状路由结构, 兄弟节点可以互相访问, 子节点回退键回到父节点, 管理一个路由足迹(这个足迹的兄弟节点互相替代),当a,b兄弟节点指向同一个子节点c,c回退,可以回退到正确的父节点. 什么,页面链接没变,不好分享特定页面的地址.你有见过别人发你一个链接,你的APP会自动跳到那个界面? 问题1: 路由状态名字重复? 通过grandfather-father-son这种命名方式.

vue-route+webpack部署单页路由项目,访问刷新出现404问题

问题描述: 前端使用vue-cli开发单页路由项目,放到nginx上访问的时候,刷新会出现404现象 服务端一开始的配置如下: server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redi

webpack 单页面应用实战

这篇文章将介绍如何利用 webpack 进行单页面应用的开发,算是我在实际开发中的一些心得和体会,在这里给大家做一个分享.webpack 的介绍这里就不多说了,可以直接去官网查看. 关于这个单页面应用大家可以直接去我的github上查看https://github.com/huangshuwei/webpackForSPA,我将结合这个项目去介绍.如果大家觉得这篇文章有不妥的地方,还请指出. 这篇文章的目的是解决我们在开发中会遇到的问题,不是一篇基础教程,还请谅解. 项目目录 我将根据这个目录结

单页面应用在微信服务号下的登录流程

最近我们的小程序涉及到虚拟支付的问题,在ios端的支付被封掉了??,所以有了在服务号上搞一套H5版的小程序的需求.由于我们小程序是mpvue写的,为了尽量复用之前的样式和逻辑,选择了前后端分离的模式,于是一段新的踩坑之旅开始了.放下wx的jssdk暂且不表,今天来说说登录时遇到的坑. 服务号的登录流程 以前搞过服务号的同学对于它的登录流程应该不陌生,就是当后端检测到当前用户没有授权时,将会重定向到微信的授权页面,当用户点击这个授权的button时,微信会根据Url查询字符串中的重定向URL,重新