Webpack
中文:
DevServer | webpack 中文文档
为什么
我们在使用单页面框架进行开发的时候经常会使用到Router
路由这个概念,那么Webpack
如何配置路由 404 的问题呢?
先来安装一下路由
安装:
$ npm install react-router-dom -S
引入两个React
代码文件和路由:
import React, { Component } from "react";
import ReactDom from "react-dom";
import { BrowserRouter, Route } from "react-router-dom";
import Home from './home.js'
import List from './list.js'
class App extends Component {
render() {
return (
<div>
<BrowserRouter>
<Route path="/" exact component={Home}></Route>
<Route path="/list" component={List}></Route>
</BrowserRouter>
</div>
)
}
}
ReactDom.render(<App />,document.getElementById("root"));
import React, { Component } from "react";
class Home extends Component {
render() {
return <div>HomePage</div>
}
}
export default Home;
import React, { Component } from "react";
class List extends Component {
render() {
return <div>ListPage</div>
}
}
export default List;
index.js
文件主要配置了路由表,根据路径对React
代码文件进行映射,我们来看一下效果。
这个时候就能看到页面 404 了,这是因为项目运行以为/home
是要查找项目下的home.html
文件,所有才会 404 了,这和Nginx
上运行是一样的。
是什么
这个时候就需要我们对Webpack
的配置文件进行devServer.historyApiFallback
配置:
// ...
module.exports = {
// ...
devServer: {
contentBase: "./dist",
open: true,
hot: true,
hotOnly: true,
// 所有路由都响应 index.html 的内容
historyApiFallback: true,
proxy: {
"/react/api": {
target: "http://www.dell-lee.com",
// 容许请求 https
secure: false,
pathRewrite: {
"header.json": "demo.json"
},
changeOrigin: true
}
}
},
// ...
}
然后重新运行项目npm run build
就能看到正常的页面啦。
更多配置项:
1、connect-history-api-fallback
:
GitHub - bripkens/connect-history-api-fallback: Fallback to index.html for applications that are using the HTML 5 history API
2、devserverhistoryapifallback
:
DevServer | webpack 中文文档
:::warning
⚠️ 注意
仅在开发环境有效
:::