UNPKG

@winner-fed/bundler-webpack

Version:

@winner-fed/bundler-webpack

285 lines (283 loc) 17.1 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/schema.ts var schema_exports = {}; __export(schema_exports, { getSchemas: () => getSchemas }); module.exports = __toCommonJS(schema_exports); var import_types = require("./types"); var devTool = [ "cheap-source-map", "cheap-module-source-map", "eval", "eval-source-map", "eval-cheap-source-map", "eval-cheap-module-source-map", "eval-nosources-cheap-source-map", "eval-nosources-cheap-module-source-map", "eval-nosources-source-map", "source-map", "hidden-source-map", "hidden-nosources-cheap-source-map", "hidden-nosources-cheap-module-source-map", "hidden-nosources-source-map", "hidden-cheap-source-map", "hidden-cheap-module-source-map", "inline-source-map", "inline-cheap-source-map", "inline-cheap-module-source-map", "inline-nosources-cheap-source-map", "inline-nosources-cheap-module-source-map", "inline-nosources-source-map", "nosources-source-map", "nosources-cheap-source-map", "nosources-cheap-module-source-map" ]; function getSchemas() { return { alias: ({ zod }) => zod.record(zod.string(), zod.any()).describe( '路径别名配置,用于简化模块导入路径。key 为别名,value 为实际路径。例如:{"@": "./src", "components": "./src/components"},可以使用 "@/utils" 代替 "./src/utils"' ), autoCSSModules: ({ zod }) => zod.boolean().describe( "是否自动开启 CSS Modules,当设置为 true 时,所有 .css 文件都会被当作 CSS Modules 处理,无需通过 .module.css 命名" ), autoprefixer: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "Autoprefixer 插件配置,用于自动添加 CSS 浏览器前缀。可配置目标浏览器、网格布局支持等选项,确保 CSS 在不同浏览器中的兼容性" ), babelLoaderCustomize: ({ zod }) => zod.string().describe( "Babel 加载器自定义函数的文件路径,允许深度定制 Babel 编译行为。该文件应导出一个函数,接收 Babel 配置并返回修改后的配置" ), cacheDirectoryPath: ({ zod }) => zod.string().describe( "构建缓存目录路径,用于存储编译缓存文件以加速后续构建。默认为 node_modules/.cache,可自定义为其他路径" ), chainWebpack: ({ zod }) => zod.function().describe( "链式修改 Webpack 配置的函数,使用 webpack-chain 语法。函数接收 config 对象,可通过链式调用修改 loader、plugin 等配置" ), checkDepCssModules: ({ zod }) => zod.boolean().default(false).describe( "是否检查依赖包中的 CSS Modules 使用情况,默认为 false。开启后会检测 node_modules 中的 CSS 模块化问题" ), copy: ({ zod }) => zod.array( zod.union([ zod.object({ from: zod.string().describe("源文件或目录的路径,支持 glob 模式匹配"), to: zod.string().describe("目标文件或目录的路径,相对于输出目录") }).describe("文件复制配置对象,指定源路径和目标路径"), zod.string().describe( "简化的文件复制配置,直接指定源路径,目标路径为输出目录" ) ]) ).describe( "文件复制配置数组,用于将静态资源从源目录复制到构建输出目录。支持 glob 模式和目录复制" ), cssLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "css-loader 的配置选项,用于处理 CSS 文件的导入和解析。可配置 modules、sourceMap、importLoaders 等选项" ), cssLoaderModules: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "CSS Modules 模式下 css-loader 的特定配置选项,如类名生成模式、本地标识符命名等" ), cssMinifier: ({ zod }) => zod.enum([ import_types.CSSMinifier.cssnano, import_types.CSSMinifier.esbuild, import_types.CSSMinifier.parcelCSS, import_types.CSSMinifier.none ]).describe( "CSS 压缩器选择,可选择 cssnano(传统压缩器)、esbuild(高性能)、parcelCSS(现代压缩器)或 none(不压缩)" ), cssMinifierOptions: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "CSS 压缩器的详细配置选项,根据选择的压缩器类型传递相应的配置参数" ), cssPublicPath: ({ zod }) => zod.string().describe( "CSS 文件的公共路径前缀,用于 CSS 中引用的资源路径。当 CSS 和其他资源部署到不同 CDN 时使用" ), deadCode: ({ zod }) => zod.object({ context: zod.string().describe("死代码检测的根目录,通常为项目根目录"), detectUnusedExport: zod.boolean().describe("是否检测未使用的导出,找出定义但未被引用的导出内容"), detectUnusedFiles: zod.boolean().describe("是否检测未使用的文件,找出项目中未被引用的文件"), exclude: zod.array(zod.string()).describe("排除检测的文件或目录模式数组,支持 glob 模式"), failOnHint: zod.boolean().describe("是否在发现死代码时使构建失败,适用于 CI/CD 流程"), patterns: zod.array(zod.string()).describe("需要检测的文件模式数组,定义检测范围") }).deepPartial().describe( "死代码检测配置,用于发现项目中未使用的文件和导出,帮助清理冗余代码和优化打包体积" ), define: ({ zod }) => zod.record(zod.string(), zod.any()).describe( '全局常量定义,在编译时替换代码中的变量。例如:{"process.env.NODE_ENV": "production"},常用于环境变量注入' ), depTranspiler: ({ zod }) => zod.enum([import_types.Transpiler.babel, import_types.Transpiler.esbuild, import_types.Transpiler.swc]).describe( "依赖包转译器选择,用于转译 node_modules 中的第三方包。babel(兼容性好)、esbuild(速度快)、swc(平衡性能)" ), devtool: ({ zod }) => zod.union([zod.enum(devTool), zod.boolean()]).describe( "Source Map 生成配置,控制调试信息的生成方式。可选择不同的 source map 类型或 boolean 值控制是否生成" ), esm: ({ zod }) => zod.object({}).describe( "ES 模块支持配置,启用现代 JavaScript 模块语法支持,包括动态导入和模块边界优化" ), externals: ({ zod }) => zod.union([ zod.record(zod.string(), zod.any()).describe("外部依赖映射对象,key 为模块名,value 为全局变量名"), zod.string().describe("单个外部依赖的模块名"), zod.function().describe("动态判断外部依赖的函数,接收模块请求并返回外部化配置") ]).describe( "外部依赖配置,指定哪些模块不打包到 bundle 中,而是在运行时从外部获取(如 CDN)" ), extraBabelExcludes: ({ zod }) => zod.array(zod.union([zod.string(), zod.instanceof(RegExp)])).describe( "额外的 Babel 编译排除规则,用于指定不需要 Babel 处理的文件或目录,支持字符串和正则表达式" ), extraBabelIncludes: ({ zod }) => zod.array(zod.union([zod.string(), zod.instanceof(RegExp)])).describe( "额外的 Babel 编译包含规则,用于指定需要强制使用 Babel 处理的文件,通常用于处理 node_modules 中的特定包" ), extraBabelPlugins: ({ zod }) => zod.array(zod.union([zod.string(), zod.array(zod.any())])).describe( "额外的 Babel 插件配置,可以是插件名称字符串或包含插件名和选项的数组。用于扩展 Babel 编译功能" ), extraBabelPresets: ({ zod }) => zod.array(zod.union([zod.string(), zod.array(zod.any())])).describe( "额外的 Babel 预设配置,可以是预设名称字符串或包含预设名和选项的数组。预设包含一组相关的插件" ), extraPostCSSPlugins: ({ zod }) => zod.array(zod.any()).describe( "额外的 PostCSS 插件配置数组,用于扩展 CSS 处理功能。可添加自定义的 PostCSS 插件实例或配置" ), forkTSChecker: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "fork-ts-checker-webpack-plugin 配置,用于在独立进程中进行 TypeScript 类型检查,避免阻塞主构建流程" ), hash: ({ zod }) => zod.boolean().describe( "是否在生成的文件名中添加哈希值,用于缓存控制。启用后文件名会包含内容哈希,文件变更时哈希也会变更" ), https: ({ zod }) => zod.object({ cert: zod.string().describe("SSL 证书文件路径,用于 HTTPS 服务"), hosts: zod.array(zod.string()).describe("允许访问的主机名列表,用于多域名支持"), http2: zod.boolean().describe("是否启用 HTTP/2 协议支持"), key: zod.string().describe("SSL 私钥文件路径,与证书配对使用") }).deepPartial().describe( "HTTPS 开发服务器配置,用于启用 SSL/TLS 加密连接的本地开发环境" ), ignoreMomentLocale: ({ zod }) => zod.boolean().describe( "是否忽略 Moment.js 的本地化文件,启用后可显著减少包体积。如需要本地化功能,应手动导入所需的 locale 文件" ), inlineLimit: ({ zod }) => zod.number().describe( "资源内联大小限制(字节),小于此大小的图片、字体等资源会被转为 base64 内联到代码中,减少 HTTP 请求" ), jsMinifier: ({ zod }) => zod.enum([ import_types.JSMinifier.esbuild, import_types.JSMinifier.swc, import_types.JSMinifier.terser, import_types.JSMinifier.uglifyJs, import_types.JSMinifier.none ]).describe( "JavaScript 压缩器选择,可选择 esbuild(极速)、swc(高性能)、terser(功能丰富)、uglifyJs(传统)或 none(不压缩)" ), jsMinifierOptions: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "JavaScript 压缩器的详细配置选项,根据选择的压缩器类型传递相应的配置参数" ), lessLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "Less 预处理器配置选项,用于编译 .less 文件。可配置变量、导入路径、插件等" ), manifest: ({ zod }) => zod.object({ basePath: zod.string().describe("清单文件中路径的基础路径前缀"), fileName: zod.string().describe("生成的清单文件名称,默认为 manifest.json") }).deepPartial().describe( "资源清单文件生成配置,记录所有打包后的资源文件路径映射,用于服务端渲染或资源加载" ), mdx: ({ zod }) => zod.object({ loader: zod.string().describe("MDX 加载器的路径或名称"), loaderOptions: zod.record(zod.string(), zod.any()).describe("MDX 加载器的配置选项") }).deepPartial().describe( "MDX 文件处理配置,用于将 Markdown 和 JSX 混合的文件编译为 React 组件" ), mfsu: ({ zod }) => zod.union([ zod.object({ cacheDirectory: zod.string().describe("MFSU 缓存目录路径"), chainWebpack: zod.function().describe("MFSU 构建的 Webpack 配置修改函数"), esbuild: zod.boolean().describe("是否使用 esbuild 进行依赖预构建"), exclude: zod.array(zod.union([zod.string(), zod.instanceof(RegExp)])).describe("排除 MFSU 处理的模块列表"), include: zod.array(zod.string()).describe("强制包含在 MFSU 中的模块列表"), mfName: zod.string().describe("微前端应用名称"), remoteAliases: zod.array(zod.string()).describe("远程模块别名列表"), remoteName: zod.string().describe("远程模块名称"), runtimePublicPath: zod.boolean().describe("是否启用运行时公共路径"), shared: zod.record(zod.string(), zod.any()).describe("共享依赖配置"), strategy: zod.enum(["eager", "normal"]).default("normal").describe("加载策略,eager 为立即加载,normal 为按需加载") }).deepPartial().describe( "MFSU(Module Federation Speed Up)详细配置,用于加速大型项目的构建速度" ), zod.boolean().describe("是否启用 MFSU 功能,设置为 true 时使用默认配置") ]).describe( "MFSU 模块联邦速度优化配置,通过预构建依赖和模块联邦技术显著提升大型项目的开发构建速度" ), normalCSSLoaderModules: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "普通 CSS 文件的 CSS Modules 配置,与 cssLoaderModules 不同,这个配置用于非模块化的 CSS 文件" ), outputPath: ({ zod }) => zod.string().describe( "构建输出目录路径,所有编译后的文件将存放在此目录中。可以是相对路径或绝对路径" ), postcssLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "PostCSS 加载器配置,用于处理 CSS 的后处理。可配置插件、解析器选项等" ), proxy: ({ zod }) => zod.union([ zod.record(zod.string(), zod.any()).describe("代理配置对象,key 为路径模式,value 为代理目标配置"), zod.array(zod.any()).describe("代理配置数组,包含多个代理规则配置对象") ]).describe( "开发服务器代理配置,用于将 API 请求代理到后端服务器,解决开发环境的跨域问题" ), publicPath: ({ zod }) => zod.string().describe( "资源的公共路径前缀,用于指定静态资源的访问路径。可以是相对路径、绝对路径或 CDN 地址" ), purgeCSS: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "PurgeCSS 配置,用于移除未使用的 CSS 代码,显著减少 CSS 文件大小。可配置内容扫描路径、保留规则等" ), runtimePublicPath: ({ zod }) => zod.object({}).describe( "运行时公共路径配置,允许在运行时动态设置资源路径,适用于多环境部署或 CDN 切换场景" ), sassLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "Sass/SCSS 预处理器配置选项,用于编译 .sass 和 .scss 文件。可配置变量、导入路径、压缩等" ), srcTranspiler: ({ zod }) => zod.enum([ import_types.Transpiler.babel, import_types.Transpiler.esbuild, import_types.Transpiler.swc, import_types.Transpiler.none ]).describe( "源码转译器选择,用于编译项目源码。babel(最佳兼容性)、esbuild(最快速度)、swc(平衡选择)、none(不转译)" ), srcTranspilerOptions: ({ zod }) => zod.object({ esbuild: zod.record(zod.string(), zod.any()).describe("esbuild 转译器的配置选项"), swc: zod.record(zod.string(), zod.any()).describe("SWC 转译器的配置选项") }).deepPartial().describe( "源码转译器的详细配置选项,根据选择的转译器类型提供相应的配置参数" ), styleLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "style-loader 配置选项,用于将 CSS 注入到页面的 <style> 标签中。可配置注入位置、属性等" ), stylusLoader: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "Stylus 预处理器配置选项,用于编译 .styl 文件。可配置变量、函数、导入路径等" ), targets: ({ zod }) => zod.record(zod.string(), zod.any()).describe( '目标浏览器配置,用于确定代码编译的兼容性目标。支持 browserslist 查询语法,如 "last 2 versions"' ), theme: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "主题变量配置,用于自定义 UI 组件库的主题样式。通常与 antd、element-ui 等组件库配合使用" ), transformRuntime: ({ zod }) => zod.record(zod.string(), zod.any()).describe( "Babel transform-runtime 插件配置,用于减少编译后代码的冗余,提供运行时 polyfill 和 helper 函数" ), writeToDisk: ({ zod }) => zod.boolean().describe( "是否将开发模式下的文件写入磁盘,默认为 false(仅内存中)。启用后可以在文件系统中查看构建结果" ) }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { getSchemas });