dev.setupMiddlewares
type SetupMiddlewaresServer = {
sockWrite: (
type: string,
data?: string | boolean | Record<string, any>,
) => void;
environments: EnvironmentAPI;
};
type SetupMiddlewaresFn = (
middlewares: {
unshift: (...handlers: RequestHandler[]) => void;
push: (...handlers: RequestHandler[]) => void;
},
server: SetupMiddlewaresServer,
) => void;
type SetupMiddlewares = SetupMiddlewaresFn | SetupMiddlewaresFn[];
提供执行自定义函数和应用自定义中间件的能力。
查看 开发服务器 - 中间件 了解更多。
执行顺序
中间件的执行顺序是: unshift
=> 内置中间件 => push
。
rsbuild.config.ts
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。
environments
提供 Rsbuild 的 environment API,详见 Dev server API - environments。
rsbuild.config.ts
export default {
dev: {
setupMiddlewares: (middlewares, { environments }) => {
middlewares.unshift(async (req, _res, next) => {
const webStats = await environments.web.getStats();
console.log(webStats.toJson({ all: false }));
next();
});
},
},
};
sockWrite
向 HMR 客户端传递一些消息,详见 Dev server API - sockWrite。
例如,如果你发送一个 'static-changed'
的消息,页面将会重新加载。
rsbuild.config.ts
export default {
dev: {
setupMiddlewares: (middlewares, { sockWrite }) => {
if (someCondition) {
sockWrite('static-changed');
}
},
},
};