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
>;
提供执行自定义函数和应用自定义中间件的能力。
执行顺序
中间件的执行顺序是: 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();
});
},
],
},
};