Горячая перезагрузка через webpack-serve с прокси (?)

У меня есть сервер, обслуживающий REST API + статический контент. Можно ли обслуживать статический контент с помощью webpack-serve и разрешать ему выполнять горячую перезагрузку, в то время как вызовы, начинающиеся с "/api", передаются в REST API?

Я попытался настроить это, используя прокси и указав каталог содержимого. Таким образом, webpack-serve будет использовать API REST, поскольку он не может соответствовать соответствующим путям API на диске. Я мог получить конечные точки API в браузере, чтобы прокси работал, но POST: использование AJAX получает 404:ed.

Я вижу в терминале, что изменения в моих исходных файлах обрабатываются, но они не распространяются ни в горячем, ни при ручном обновлении (пакет js подается как статический контент с диска, где он остается неизменным). Буду очень признателен за указатели!

Мой конфиг:

const path = require("path");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const proxy = require("http-proxy-middleware");
const convert = require("koa-connect");
const Router = require("koa-router");

const router = new Router();

const proxyOptions = {
  target: "http://localhost/",
  changeOrigin: true
};

router.get("*", convert(proxy(proxyOptions)));

module.exports = {
  watch: true,
  mode: "development",
  entry: "./internal-jsx/react-views.js",
  output: {
    path: path.resolve("static/scripts"),
    filename: "dev.bundle.js"
  },
  serve: {
    content: "./static",
    port: 8080,
    hot: {
      hot: true
    },
    add: (app, middleware, options) => {
      middleware.webpack();
      middleware.content();
      app.use(router.routes());
    }
  },
  module: {
    rules: [
      {
        enforce: "pre",
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "eslint-loader"
      },
      { 
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: [
            {
              loader: "css-loader",
              options: {
                minimize: true,
                url: false
              }
            }
          ]
        })
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: "babel-loader"
      },
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: "babel-loader"
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin("../css/bundle.css")
  ]
};

1 ответ

Вы можете добавить промежуточное программное обеспечение, которое направляет запрос на сервер веб-пакетов.

Таким образом, все запросы сначала будут проходить через ваш собственный сервер. Если это вызов /api ответь сам. Если это запрос статических ресурсов, перешлите его на сервер веб-пакетов.

Другие вопросы по тегам