typing.ts 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. import type { PluginVisualizerOptions } from 'rollup-plugin-visualizer';
  2. import type { ConfigEnv, PluginOption, UserConfig } from 'vite';
  3. import type { PluginOptions } from 'vite-plugin-dts';
  4. import type { Options as PwaPluginOptions } from 'vite-plugin-pwa';
  5. /**
  6. * ImportMap 配置接口
  7. * @description 用于配置模块导入映射,支持自定义导入路径和范围
  8. * @example
  9. * ```typescript
  10. * {
  11. * imports: {
  12. * 'vue': 'https://unpkg.com/vue@3.2.47/dist/vue.esm-browser.js'
  13. * },
  14. * scopes: {
  15. * 'https://site.com/': {
  16. * 'vue': 'https://unpkg.com/vue@3.2.47/dist/vue.esm-browser.js'
  17. * }
  18. * }
  19. * }
  20. * ```
  21. */
  22. interface IImportMap {
  23. /** 模块导入映射 */
  24. imports?: Record<string, string>;
  25. /** 作用域特定的导入映射 */
  26. scopes?: {
  27. [scope: string]: Record<string, string>;
  28. };
  29. }
  30. /**
  31. * 打印插件配置选项
  32. * @description 用于配置控制台打印信息
  33. */
  34. interface PrintPluginOptions {
  35. /**
  36. * 打印的数据映射
  37. * @description 键值对形式的数据,将在控制台打印
  38. * @example
  39. * ```typescript
  40. * {
  41. * 'App Version': '1.0.0',
  42. * 'Build Time': '2024-01-01'
  43. * }
  44. * ```
  45. */
  46. infoMap?: Record<string, string | undefined>;
  47. }
  48. /**
  49. * Nitro Mock 插件配置选项
  50. * @description 用于配置 Nitro Mock 服务器的行为
  51. */
  52. interface NitroMockPluginOptions {
  53. /**
  54. * Mock 服务器包名
  55. * @default '@vbenjs/nitro-mock'
  56. */
  57. mockServerPackage?: string;
  58. /**
  59. * Mock 服务端口
  60. * @default 3000
  61. */
  62. port?: number;
  63. /**
  64. * 是否打印 Mock 日志
  65. * @default false
  66. */
  67. verbose?: boolean;
  68. }
  69. /**
  70. * 归档插件配置选项
  71. * @description 用于配置构建产物的压缩归档
  72. */
  73. interface ArchiverPluginOptions {
  74. /**
  75. * 输出文件名
  76. * @default 'dist'
  77. */
  78. name?: string;
  79. /**
  80. * 输出目录
  81. * @default '.'
  82. */
  83. outputDir?: string;
  84. }
  85. /**
  86. * ImportMap 插件配置
  87. * @description 用于配置模块的 CDN 导入
  88. */
  89. interface ImportmapPluginOptions {
  90. /**
  91. * CDN 供应商
  92. * @default 'jspm.io'
  93. * @description 支持 esm.sh 和 jspm.io 两种 CDN 供应商
  94. */
  95. defaultProvider?: 'esm.sh' | 'jspm.io';
  96. /**
  97. * ImportMap 配置数组
  98. * @description 配置需要从 CDN 导入的包
  99. * @example
  100. * ```typescript
  101. * [
  102. * { name: 'vue' },
  103. * { name: 'pinia', range: '^2.0.0' }
  104. * ]
  105. * ```
  106. */
  107. importmap?: Array<{ name: string; range?: string }>;
  108. /**
  109. * 手动配置 ImportMap
  110. * @description 自定义 ImportMap 配置
  111. */
  112. inputMap?: IImportMap;
  113. }
  114. /**
  115. * 条件插件配置
  116. * @description 用于根据条件动态加载插件
  117. */
  118. interface ConditionPlugin {
  119. /**
  120. * 判断条件
  121. * @description 当条件为 true 时加载插件
  122. */
  123. condition?: boolean;
  124. /**
  125. * 插件对象
  126. * @description 返回插件数组或 Promise
  127. */
  128. plugins: () => PluginOption[] | PromiseLike<PluginOption[]>;
  129. }
  130. /**
  131. * 通用插件配置选项
  132. * @description 所有插件共用的基础配置
  133. */
  134. interface CommonPluginOptions {
  135. /**
  136. * 是否开启开发工具
  137. * @default false
  138. */
  139. devtools?: boolean;
  140. /**
  141. * 环境变量
  142. * @description 自定义环境变量
  143. */
  144. env?: Record<string, any>;
  145. /**
  146. * 是否注入元数据
  147. * @default true
  148. */
  149. injectMetadata?: boolean;
  150. /**
  151. * 是否为构建模式
  152. * @default false
  153. */
  154. isBuild?: boolean;
  155. /**
  156. * 构建模式
  157. * @default 'development'
  158. */
  159. mode?: string;
  160. /**
  161. * 是否开启依赖分析
  162. * @default false
  163. * @description 使用 rollup-plugin-visualizer 分析依赖
  164. */
  165. visualizer?: boolean | PluginVisualizerOptions;
  166. }
  167. /**
  168. * 应用插件配置选项
  169. * @description 用于配置应用构建时的插件选项
  170. */
  171. interface ApplicationPluginOptions extends CommonPluginOptions {
  172. /**
  173. * 是否开启压缩归档
  174. * @default false
  175. * @description 开启后会在打包目录生成 zip 文件
  176. */
  177. archiver?: boolean;
  178. /**
  179. * 压缩归档插件配置
  180. * @description 配置压缩归档的行为
  181. */
  182. archiverPluginOptions?: ArchiverPluginOptions;
  183. /**
  184. * 是否开启压缩
  185. * @default false
  186. * @description 支持 gzip 和 brotli 压缩
  187. */
  188. compress?: boolean;
  189. /**
  190. * 压缩类型
  191. * @default ['gzip']
  192. * @description 可选的压缩类型
  193. */
  194. compressTypes?: ('brotli' | 'gzip')[];
  195. /**
  196. * 是否抽离配置文件
  197. * @default false
  198. * @description 在构建时抽离配置文件
  199. */
  200. extraAppConfig?: boolean;
  201. /**
  202. * 是否开启 HTML 插件
  203. * @default true
  204. */
  205. html?: boolean;
  206. /**
  207. * 是否开启国际化
  208. * @default false
  209. */
  210. i18n?: boolean;
  211. /**
  212. * 是否开启 ImportMap CDN
  213. * @default false
  214. */
  215. importmap?: boolean;
  216. /**
  217. * ImportMap 插件配置
  218. */
  219. importmapOptions?: ImportmapPluginOptions;
  220. /**
  221. * 是否注入应用加载动画
  222. * @default true
  223. */
  224. injectAppLoading?: boolean;
  225. /**
  226. * 是否注入全局 SCSS
  227. * @default true
  228. */
  229. injectGlobalScss?: boolean;
  230. /**
  231. * 是否注入版权信息
  232. * @default true
  233. */
  234. license?: boolean;
  235. /**
  236. * 是否开启 Nitro Mock
  237. * @default false
  238. */
  239. nitroMock?: boolean;
  240. /**
  241. * Nitro Mock 插件配置
  242. */
  243. nitroMockOptions?: NitroMockPluginOptions;
  244. /**
  245. * 是否开启控制台打印
  246. * @default false
  247. */
  248. print?: boolean;
  249. /**
  250. * 打印插件配置
  251. */
  252. printInfoMap?: PrintPluginOptions['infoMap'];
  253. /**
  254. * 是否开启 PWA
  255. * @default false
  256. */
  257. pwa?: boolean;
  258. /**
  259. * PWA 插件配置
  260. */
  261. pwaOptions?: Partial<PwaPluginOptions>;
  262. /**
  263. * 是否开启 VXE Table 懒加载
  264. * @default false
  265. */
  266. vxeTableLazyImport?: boolean;
  267. }
  268. /**
  269. * 库插件配置选项
  270. * @description 用于配置库构建时的插件选项
  271. */
  272. interface LibraryPluginOptions extends CommonPluginOptions {
  273. /**
  274. * 是否开启 DTS 输出
  275. * @default true
  276. * @description 生成 TypeScript 类型声明文件
  277. */
  278. dts?: boolean | PluginOptions;
  279. }
  280. /**
  281. * 应用配置选项类型
  282. */
  283. type ApplicationOptions = ApplicationPluginOptions;
  284. /**
  285. * 库配置选项类型
  286. */
  287. type LibraryOptions = LibraryPluginOptions;
  288. /**
  289. * 应用配置定义函数类型
  290. * @description 用于定义应用构建配置
  291. */
  292. type DefineApplicationOptions = (config?: ConfigEnv) => Promise<{
  293. /** 应用插件配置 */
  294. application?: ApplicationOptions;
  295. /** Vite 配置 */
  296. vite?: UserConfig;
  297. }>;
  298. /**
  299. * 库配置定义函数类型
  300. * @description 用于定义库构建配置
  301. */
  302. type DefineLibraryOptions = (config?: ConfigEnv) => Promise<{
  303. /** 库插件配置 */
  304. library?: LibraryOptions;
  305. /** Vite 配置 */
  306. vite?: UserConfig;
  307. }>;
  308. /**
  309. * 配置定义类型
  310. * @description 应用或库的配置定义
  311. */
  312. type DefineConfig = DefineApplicationOptions | DefineLibraryOptions;
  313. export type {
  314. ApplicationPluginOptions,
  315. ArchiverPluginOptions,
  316. CommonPluginOptions,
  317. ConditionPlugin,
  318. DefineApplicationOptions,
  319. DefineConfig,
  320. DefineLibraryOptions,
  321. IImportMap,
  322. ImportmapPluginOptions,
  323. LibraryPluginOptions,
  324. NitroMockPluginOptions,
  325. PrintPluginOptions,
  326. };