UNPKG

env-manage-plugin

Version:

A dev env plugin that integrates an Express server with request proxying capabilities.

160 lines (159 loc) 4.64 kB
import { IncomingMessage } from "http"; import { Options as HttpProxyOptions } from "http-proxy-middleware"; export declare enum APP_STATUS { RUNNING = "running", STOP = "stop" } /** * APP 状态 PreProxyServer 的状态 */ export type APP_STATUS_TYPE = APP_STATUS; /** * 环境 和 devServer 的主键 */ export type KeyObj = { name: string; port?: number | string; }; /** * 开发服务器配置项 */ export type DevServerItem = { /** * 开发服务器的唯一标识名称,作为主键使用 */ name: string; /** * 开发服务器的地址,指定了开发服务器的访问路径 * * @example * ```txt * http://127.0.0.1:5173 * ``` */ target: string; }; /** * 环境配置项 */ export type EnvItem = { /** * 环境的唯一标识名称,作为主键使用 */ name: string; /** * 本地启动后前端服务所在的端口号。 * * 当多个环境共用一个端口时,各个服务会自动互斥。 */ port: number; /** * 目标 API 服务器的地址,请求将被转发到该地址 */ target: string; /** * 当前环境的首页地址,会覆盖全局配置中的首页地址。 * * @default '/' */ indexPage?: string; /** * 是否启用 前置代理的 cookie 换成替换, * 前置代理的 cookie 缓存替换,是为了解决,浏览器中登录时,同主机不同端口的cookie会共享的问题 * * @default true */ isEnableCookieProxy?: boolean; /** * 当前环境使用的开发服务器名称。 * * 若未提供,则默认使用开发服务器列表 {@link EnvmConfig.devServerList `Config.devServerList` } 中的第一个。 */ devServerName?: string; /** * 路由转发函数,用于根据请求和当前环境信息动态确定转发目标。 * * 提供了此配置之后,会覆盖 {@link EnvItem.target `EnvItem.target`} * * 规则同 {@link https://www.npmjs.com/package/http-proxy-middleware#router-objectfunction `http-proxy-middleware router`}, * 但不支持对象形式,且增加了第二个参数用于传递当前环境相关信息。 * * * @example * ```js * ... * router: async (req, env) => { * return 'http://127.0.0.1:3000'; * } * ... * ``` */ router?: RouterFunction; }; /** * 转发路由配置函数类型 * * @param {IncomingMessage} req - HTTP 请求对象,包含了客户端发送的请求信息,如请求方法、请求头、请求路径等。 * @param {EnvItem} env - 当前环境的配置项,包含了环境名称、端口、目标 API 服务器地址等信息。 * @returns {Promise<HttpProxyOptions["target"]>} - 返回一个 Promise,该 Promise 解析为代理目标的地址,用于指定请求要转发到的目标服务器。 */ type RouterFunction = (req: IncomingMessage, env: EnvItem) => Promise<HttpProxyOptions["target"]>; /** * 应用配置 */ export interface EnvmConfig { /** * 后置转发端口,开发服务器将请求转发到该端口对应的地址。 * * @default 3099 */ port: number; /** * 管理页面相关接口的基础路径。 * * 若与业务路径冲突,可通过此配置进行调整。 * * @default '/dev-manage-api' */ basePath: string; /** * 应用的首页地址。 * * @default '/' */ indexPage: string; /** * 是否启用 前置代理的 cookie 缓存, * 前置代理的 cookie 缓存替换,是为了解决,浏览器中登录时,同主机不同端口的cookie会共享的问题 * * @default true */ isEnableCookieProxy?: boolean; /** * cookie 后缀,cookie name 的一些特殊前缀有作用,左翼使用后缀 * 由于同主机不同端口 cookie 共享,会将登录不同端口的 cookie 区分端口再次存储,此字段作为后缀,在代理时,重新复写cookie * * @default 'envm' */ cookieSuffix?: string; /** * 开发服务器列表,包含多个开发服务器的配置信息 */ devServerList: Array<DevServerItem>; /** * 开发环境列表,包含多个开发环境的配置信息 */ envList: Array<EnvItem>; } /** * 应用启动配置 */ export interface Options { /** * 配置文件的地址,指定了应用启动时加载的配置文件路径。 * * @default 'envm.config.[m/c]js' */ config?: string; } export {};