How to tell webpack dev server to serve index.html for any route

后端 未结 10 2060
心在旅途
心在旅途 2020-11-28 22:00

React router allows react apps to handle /arbitrary/route. In order this to work, I need my server to send the React app on any matched route.

But webpa

相关标签:
10条回答
  • 2020-11-28 22:23

    I found the easiest solution to include a small config:

      devServer: {
        port: 3000,
        historyApiFallback: {
          index: 'index.html'
        }
      }
    

    I found this by visiting: PUSHSTATE WITH WEBPACK-DEV-SERVER.

    0 讨论(0)
  • 2020-11-28 22:25

    Works for me like this

    devServer: {
        contentBase: "./src",
        hot: true,
        port: 3000,
        historyApiFallback: true
    
    },
    

    Working on riot app

    0 讨论(0)
  • 2020-11-28 22:25

    My situation was a little different, since I am using the angular CLI with webpack and the 'eject' option after running the ng eject command. I modified the ejected npm script for 'npm start' in the package.json to pass in the --history-api-fallback flag

    "start": "webpack-dev-server --port=4200 --history-api-fallback"

    "scripts": {
    "ng": "ng",
    "start": "webpack-dev-server --port=4200 --history-api-fallback",
    "build": "webpack",
    "test": "karma start ./karma.conf.js",
    "lint": "ng lint",
    "e2e": "protractor ./protractor.conf.js",
    "prepree2e": "npm start",
    "pree2e": "webdriver-manager update --standalone false --gecko false --quiet",
    "startold": "webpack-dev-server --inline --progress --port 8080",
    "testold": "karma start",
    "buildold": "rimraf dist && webpack --config config/webpack.prod.js --progress --profile --bail"},
    
    0 讨论(0)
  • 2020-11-28 22:25

    If you choose to use webpack-dev-server, you should not use it to serve your entire React app. You should use it to serve your bundle.js file as well as the static dependencies. In this case, you would have to start 2 servers, one for the Node.js entry points, that are actually going to process routes and serve the HTML, and another one for the bundle and static resources.

    If you really want a single server, you have to stop using the webpack-dev-server and start using the webpack-dev-middleware within your app-server. It will process bundles "on the fly" (I think it supports caching and hot module replacements) and make sure your calls to bundle.js are always up to date.

    0 讨论(0)
  • 2020-11-28 22:27

    I know this question is for webpack-dev-server, but for anyone who uses webpack-serve 2.0. with webpack 4.16.5; webpack-serve allows add-ons.You'll need to create serve.config.js:

    const serve = require('webpack-serve');
    const argv = {};
    const config = require('./webpack.config.js');
    
    const history = require('connect-history-api-fallback');
    const convert = require('koa-connect');
    
    serve(argv, { config }).then((result) => {
      server.on('listening', ({ server, options }) => {
          options.add: (app, middleware, options) => {
    
              // HistoryApiFallback
              const historyOptions = {
                  // ... configure options
              };
    
              app.use(convert(history(historyOptions)));
          }
      });
    });
    

    Reference

    You will need to change the dev script from webpack-serve to node serve.config.js.

    0 讨论(0)
  • 2020-11-28 22:29

    historyApiFallback option on official documentation for webpack-dev-server explains clearly how you can achieve either by using

    historyApiFallback: true
    

    which simply falls back to index.html when the route is not found

    or

    // output.publicPath: '/foo-app/'
    historyApiFallback: {
      index: '/foo-app/'
    }
    
    0 讨论(0)
提交回复
热议问题