UNPKG

@gez/rspack

Version:

A high-performance Rspack integration for Gez microfrontend framework, providing module federation and SSR capabilities.

161 lines (160 loc) 4.51 kB
import { type App, type Gez } from '@gez/core'; import type { RspackOptions } from '@rspack/core'; import type { BuildTarget } from './build-target'; /** * Rspack 应用配置上下文接口。 * * 该接口提供了在配置钩子函数中可以访问的上下文信息,允许你: * - 访问 Gez 框架实例 * - 获取当前的构建目标(client/server/node) * - 修改 Rspack 配置 * - 访问应用选项 * * @example * ```ts * // entry.node.ts * export default { * async devApp(gez) { * return import('@gez/rspack').then((m) => * m.createRspackApp(gez, { * // 配置钩子函数 * config(context) { * // 访问构建目标 * if (context.buildTarget === 'client') { * // 修改客户端构建配置 * context.config.optimization = { * ...context.config.optimization, * splitChunks: { * chunks: 'all' * } * }; * } * } * }) * ); * } * }; * ``` */ export interface RspackAppConfigContext { /** * Gez 框架实例。 * 可用于访问框架提供的 API 和工具函数。 */ gez: Gez; /** * 当前的构建目标。 * - 'client': 客户端构建,生成浏览器可执行的代码 * - 'server': 服务端构建,生成 SSR 渲染代码 * - 'node': Node.js 构建,生成服务器入口代码 */ buildTarget: BuildTarget; /** * Rspack 编译配置对象。 * 你可以在配置钩子中修改这个对象来自定义构建行为。 */ config: RspackOptions; /** * 创建应用时传入的选项对象。 */ options: RspackAppOptions; } /** * Rspack 应用配置选项接口。 * * 该接口提供了创建 Rspack 应用时可以使用的配置选项,包括: * - 代码压缩选项 * - Rspack 配置钩子函数 * * @example * ```ts * // entry.node.ts * export default { * async devApp(gez) { * return import('@gez/rspack').then((m) => * m.createRspackApp(gez, { * // 禁用代码压缩 * minimize: false, * // 自定义 Rspack 配置 * config(context) { * if (context.buildTarget === 'client') { * context.config.optimization.splitChunks = { * chunks: 'all' * }; * } * } * }) * ); * } * }; * ``` */ export interface RspackAppOptions { /** * 是否启用代码压缩。 * * - true: 启用代码压缩 * - false: 禁用代码压缩 * - undefined: 根据环境自动判断(生产环境启用,开发环境禁用) * * @default undefined */ minimize?: boolean; /** * Rspack 配置钩子函数。 * * 在构建开始前调用,可以通过该函数修改 Rspack 的编译配置。 * 支持针对不同的构建目标(client/server/node)进行差异化配置。 * * @param context - 配置上下文,包含框架实例、构建目标和配置对象 */ config?: (context: RspackAppConfigContext) => void; } /** * 创建 Rspack 应用实例。 * * 该函数根据运行环境(开发/生产)创建不同的应用实例: * - 开发环境:配置热更新中间件和实时渲染 * - 生产环境:配置构建任务 * * @param gez - Gez 框架实例 * @param options - Rspack 应用配置选项 * @returns 返回应用实例 * * @example * ```ts * // entry.node.ts * export default { * async devApp(gez) { * return import('@gez/rspack').then((m) => * m.createRspackApp(gez, { * config(context) { * // 配置 loader 处理不同类型的文件 * context.config.module = { * rules: [ * { * test: /\.ts$/, * exclude: [/node_modules/], * loader: 'builtin:swc-loader', * options: { * jsc: { * parser: { * syntax: 'typescript' * } * } * } * }, * { * test: /\.css$/, * use: ['style-loader', 'css-loader'] * } * ] * }; * } * }) * ); * } * }; * ``` */ export declare function createRspackApp(gez: Gez, options?: RspackAppOptions): Promise<App>;