Webpack中文:
DevServer | webpack 中文文档

为什么

我们在使用单页面框架进行开发的时候经常会使用到Router路由这个概念,那么Webpack如何配置路由 404 的问题呢?
先来安装一下路由
安装:

  1. $ npm install react-router-dom -S

引入两个React代码文件和路由:

  1. import React, { Component } from "react";
  2. import ReactDom from "react-dom";
  3. import { BrowserRouter, Route } from "react-router-dom";
  4. import Home from './home.js'
  5. import List from './list.js'
  6. class App extends Component {
  7. render() {
  8. return (
  9. <div>
  10. <BrowserRouter>
  11. <Route path="/" exact component={Home}></Route>
  12. <Route path="/list" component={List}></Route>
  13. </BrowserRouter>
  14. </div>
  15. )
  16. }
  17. }
  18. ReactDom.render(<App />,document.getElementById("root"));
  1. import React, { Component } from "react";
  2. class Home extends Component {
  3. render() {
  4. return <div>HomePage</div>
  5. }
  6. }
  7. export default Home;
  1. import React, { Component } from "react";
  2. class List extends Component {
  3. render() {
  4. return <div>ListPage</div>
  5. }
  6. }
  7. export default List;

index.js文件主要配置了路由表,根据路径对React代码文件进行映射,我们来看一下效果。
image.png
这个时候就能看到页面 404 了,这是因为项目运行以为/home是要查找项目下的home.html文件,所有才会 404 了,这和Nginx上运行是一样的。

是什么

这个时候就需要我们对Webpack的配置文件进行devServer.historyApiFallback配置:

  1. // ...
  2. module.exports = {
  3. // ...
  4. devServer: {
  5. contentBase: "./dist",
  6. open: true,
  7. hot: true,
  8. hotOnly: true,
  9. // 所有路由都响应 index.html 的内容
  10. historyApiFallback: true,
  11. proxy: {
  12. "/react/api": {
  13. target: "http://www.dell-lee.com",
  14. // 容许请求 https
  15. secure: false,
  16. pathRewrite: {
  17. "header.json": "demo.json"
  18. },
  19. changeOrigin: true
  20. }
  21. }
  22. },
  23. // ...
  24. }

然后重新运行项目npm run build就能看到正常的页面啦。
image.png
更多配置项:
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 ⚠️ 注意
仅在开发环境有效 :::