@winner-fed/bundler-webpack
Version:
@winner-fed/bundler-webpack
285 lines (283 loc) • 17.1 kB
JavaScript
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
});