dev.setupMiddlewares

  • 类型:
type SetupMiddlewaresServer = {
  sockWrite: (
    type: string,
    data?: string | boolean | Record<string, any>,
  ) => void;
  environments: EnvironmentAPI;
};

type SetupMiddlewares = Array<
  (
    middlewares: {
      unshift: (...handlers: RequestHandler[]) => void;
      push: (...handlers: RequestHandler[]) => void;
    },
    server: SetupMiddlewaresServer,
  ) => void
>;
  • 默认值: undefined

提供执行自定义函数和应用自定义中间件的能力。

执行顺序

中间件的执行顺序是: unshift => 内置中间件 => push

export default {
  dev: {
    setupMiddlewares: [
      (middlewares, server) => {
        middlewares.unshift((req, res, next) => {
          console.log('first');
          next();
        });

        middlewares.push((req, res, next) => {
          console.log('last');
          next();
        });
      },
    ],
  },
};

Server API

setupMiddlewares 函数中,你可以访问到 server 对象,该对象提供了一些服务器 API。

sockWrite

sockWrite 允许中间件向 HMR 客户端传递一些消息,HMR 客户端将根据接收到的消息类型进行不同的处理。

例如,如果你发送一个 'content-changed' 的消息,页面将会重新加载。

export default {
  dev: {
    setupMiddlewares: [
      (middlewares, server) => {
        if (someCondition) {
          server.sockWrite('content-changed');
        }
      },
    ],
  },
};

environments

environments 包含 Rsbuild 的 environment API,这允许你在服务端获取特定环境下的构建产物信息。

export default {
  dev: {
    setupMiddlewares: [
      (middlewares, server) => {
        middlewares.unshift(async (req, _res, next) => {
          const webStats = await server.environments.web.getStats();

          console.log(webStats.toJson({ all: false }));

          next();
        });
      },
    ],
  },
};