项目结构
这是一个包含 Rust crates 和 JavaScript 包的单体仓库:
Rust crates (crates/)
核心 Crates
rspack: 集成所有核心功能和插件的主 crate,提供完整的构建工具入口点rspack_core: 包含模块系统、依赖图、编译管道和其他核心功能的核心引擎rspack_binding_api: Node.js 绑定 API,将 Rust 核心功能桥接到 JavaScript/TypeScript 接口node_binding: Node.js 绑定实现,用于生成 Node.js 原生模块rspack_napi: NAPI (Node-API) 支持层,用于 Rust 和 Node.js 之间的互操作性rspack_allocator: 使用 mimalloc 的内存分配器,用于优化内存分配性能(Linux/macOS)
构建与绑定 Crates
rspack_binding_build: 用于构建 Node.js 原生绑定的构建脚本rspack_binding_builder: 用于生成自定义 Rspack 绑定的绑定构建器rspack_binding_builder_macros: 绑定构建器宏,提供过程宏支持rspack_binding_builder_testing: 绑定构建器测试工具
工具类 Crates
rspack_error: 错误处理和格式化,提供用户友好的错误消息rspack_fs: 文件系统抽象层,提供跨平台文件操作接口rspack_paths: 路径工具,用于路径规范化、解析和操作rspack_hash: 哈希算法实现,支持 MD4、SHA2、xxhash 等rspack_regex: 正则表达式工具,提供高性能的正则匹配rspack_location: 位置信息处理,用于源代码位置跟踪rspack_ids: ID 生成和管理,用于为模块、chunk 等创建唯一标识符rspack_collections: 集合数据结构,提供优化的 HashMap、HashSet 等rspack_util: 工具函数集合,包含各种辅助函数rspack_futures: 异步工具,提供异步编程支持rspack_workspace: 工作区支持,用于处理单体仓库场景
缓存与存储
rspack_cacheable: 缓存系统,提供可缓存数据的序列化和反序列化rspack_cacheable_macros: 缓存系统宏,用于自动生成缓存相关代码rspack_cacheable_test: 缓存系统测试rspack_storage: 存储抽象层,提供持久化存储接口
Hook 系统
rspack_hook: Hook 系统,实现插件 hook 注册和调用机制rspack_macros: 过程宏,提供各种编译时代码生成功能rspack_macros_test: 宏系统测试
编译与转换
rspack_javascript_compiler: JavaScript 编译器,用于处理 JS/TS 代码编译rspack_loader_runner: Loader 运行器,用于执行各种 loader 来处理资源rspack_loader_swc: SWC loader,使用 SWC 进行代码转换rspack_loader_lightningcss: Lightning CSS loader,用于处理 CSS 文件rspack_loader_react_refresh: React Fast Refresh loader,支持 React 热模块替换rspack_loader_preact_refresh: Preact Refresh loader,支持 Preact 热模块替换rspack_loader_testing: Loader 测试工具
插件系统
核心插件
rspack_plugin_javascript: JavaScript 插件,用于解析、转换和生成 JS/TS 模块代码rspack_plugin_runtime: Runtime 插件,生成 webpack 兼容的运行时代码rspack_plugin_entry: Entry 插件,用于处理入口点配置rspack_plugin_dynamic_entry: 动态入口插件,支持动态入口点
资源与资源插件
rspack_plugin_asset: Asset 插件,用于处理静态资源rspack_plugin_copy: Copy 插件,用于将文件复制到输出目录rspack_plugin_json: JSON 插件,用于处理 JSON 文件rspack_plugin_wasm: WebAssembly 插件,用于处理 WASM 模块rspack_plugin_html: HTML 插件,用于生成 HTML 文件
CSS 插件
rspack_plugin_css: CSS 插件,用于处理 CSS 模块和样式rspack_plugin_extract_css: CSS 提取插件,用于将 CSS 提取到单独的文件rspack_plugin_css_chunking: CSS 代码分割插件rspack_plugin_lightning_css_minimizer: Lightning CSS 压缩插件
优化插件
rspack_plugin_swc_js_minimizer: SWC JavaScript 压缩插件rspack_plugin_split_chunks: 代码分割插件,实现 chunk 分割策略rspack_plugin_merge_duplicate_chunks: 合并重复 chunk 插件rspack_plugin_remove_empty_chunks: 移除空 chunk 插件rspack_plugin_remove_duplicate_modules: 移除重复模块插件rspack_plugin_limit_chunk_count: 限制 chunk 数量插件rspack_plugin_real_content_hash: 真实内容哈希插件,基于内容生成哈希
开发插件
rspack_plugin_hmr: 热模块替换 (HMR) 插件rspack_plugin_devtool: Source Map 插件,用于生成 source maprspack_plugin_progress: 进度显示插件rspack_plugin_lazy_compilation: 懒编译插件
库与模块插件
rspack_plugin_library: Library 插件,用于生成库文件rspack_plugin_esm_library: ESM 库插件,用于生成 ES 模块格式的库rspack_plugin_externals: Externals 插件,用于排除外部依赖rspack_plugin_module_replacement: 模块替换插件,支持模块别名rspack_plugin_ignore: Ignore 插件,用于忽略特定模块
高级功能
rspack_plugin_mf: 模块联邦插件,实现微前端模块联邦rspack_plugin_dll: DLL 插件,实现动态链接库功能rspack_plugin_worker: Web Worker 插件,用于处理 Worker 文件rspack_plugin_web_worker_template: Web Worker 模板插件rspack_plugin_schemes: 自定义 scheme 插件,支持自定义资源协议rspack_plugin_runtime_chunk: Runtime chunk 插件,用于分离运行时代码
工具插件
rspack_plugin_ensure_chunk_conditions: 确保 chunk 条件插件rspack_plugin_no_emit_on_errors: 错误时不输出插件rspack_plugin_circular_dependencies: 循环依赖检测插件rspack_plugin_banner: Banner 插件,用于添加文件头部注释rspack_plugin_size_limits: 大小限制插件,用于检查 bundle 大小rspack_plugin_sri: 子资源完整性 (SRI) 插件rspack_plugin_module_info_header: 模块信息头部插件rspack_plugin_warn_sensitive_module: 警告敏感模块插件
调试与测试插件
rspack_plugin_rsdoctor: RsDoctor 插件,提供调试和诊断功能rspack_plugin_rslib: RsLib 插件,用于库构建rspack_plugin_rstest: RsTest 插件,用于测试
浏览器与环境支持
rspack_browser: 浏览器环境支持,提供浏览器端实现rspack_browserslist: Browserslist 支持,用于处理浏览器兼容性查询
监控与追踪
rspack_tracing: 追踪系统,提供性能追踪功能rspack_tracing_perfetto: Perfetto 追踪支持,集成 Perfetto 性能分析工具rspack_watcher: 文件监听器,监控文件变化以触发重新构建rspack_tasks: 任务系统,用于管理构建任务
SWC 插件
swc_plugin_import: SWC import 插件,用于处理模块导入转换swc_plugin_ts_collector: SWC TypeScript 收集器插件,用于收集 TS 类型信息
NPM 包 (packages/)
核心包
@rspack/core: 主要的 JavaScript/TypeScript 包,提供 webpack 兼容的 API,包装 Rust 核心功能并暴露完整的构建工具接口供 Node.js 应用使用
CLI 工具
@rspack/cli: 命令行接口,提供 build、serve 和 preview 命令,用于从终端运行 Rspackcreate-rspack: 项目脚手架工具,用于创建新的 Rspack 项目,支持多种模板(vanilla、React、Vue),同时支持 JavaScript 和 TypeScript
浏览器支持
@rspack/browser: Rspack 的浏览器兼容版本,可以在浏览器环境中使用 WebAssembly 运行,目前处于早期开发阶段
测试工具
@rspack/test-tools: 测试工具和辅助函数,用于编写和运行 Rspack 测试,包括对 WebAssembly 测试执行的支持
测试用例 (tests/)
核心测试套件 (rspack-test/)
Rspack 核心功能的主要测试套件,包含各种模拟构建过程的测试类型:
测试类型
normalCases/(Normal.test.js,Normal-dev.test.js,Normal-hot.test.js,Normal-prod.test.js): 用于测试无需配置更改的核心构建过程的测试用例,当测试不需要rspack.config.js时使用configCases/(Config.part1.test.js,Config.part2.test.js,Config.part3.test.js): 用于测试构建配置选项的测试用例,允许通过rspack.config.js指定构建配置,通过test.config.js控制测试行为hotCases/(HotNode.test.js,HotWeb.test.js,HotWorker.test.js,HotSnapshot.hottest.js): 用于测试热模块替换 (HMR) 功能的测试用例,包括 HotNode (target=async-node)、HotWeb (target=web) 和 HotWorker (target=webworker)watchCases/(Watch.part1.test.js,Watch.part2.test.js,Watch.part3.test.js): 用于测试 Watch 模式下增量编译的测试用例,使用编号目录 (0, 1, 2...) 表示变更批次statsOutputCases/(StatsOutput.test.js): 用于测试构建完成后控制台输出日志的测试用例,快照存储在__snapshots__/StatsOutput.test.js.snapstatsAPICases/(StatsAPI.test.js): 用于测试构建完成后生成的 Stats 对象的测试用例,使用tests/rspack-test/fixtures作为源代码diagnosticsCases/(Diagnostics.test.js): 用于测试构建过程中格式化的警告/错误输出的测试用例,快照存储在stats.err文件中hashCases/(Hash.test.js): 用于测试哈希生成功能的测试用例,验证 Stats 对象中的哈希信息compilerCases/(Compiler.test.js): 用于测试 Compiler/Compilation 对象 API 的测试用例,使用tests/rspack-test/fixtures作为源代码defaultsCases/(Defaults.test.js): 用于测试配置选项交互的测试用例,生成构建配置并观察与默认配置的差异errorCases/(Error.test.js): 用于测试compilation.errors和compilation.warnings交互的测试用例hookCases/(Hook.test.js): 用于测试各种 hook 功能的测试用例,在快照中记录 hook 的输入/输出treeShakingCases/(TreeShaking.test.js): 用于测试 Tree Shaking 相关功能的测试用例,产品快照存储在__snapshots__/treeshaking.snap.txtbuiltinCases/(Builtin.test.js): 用于测试具有内置原生实现的插件的测试用例,根据插件类型(CSS、CSS 模块、HTML、JavaScript)生成不同的快照cacheCases/(Cache.test.js): 用于测试缓存功能的测试用例,包括通用缓存、失效、快照、存储和可移植缓存场景serialCases/(Serial.test.js): 用于测试串行执行场景的测试用例exampleCases/(Example.test.js): 演示各种 Rspack 功能的示例测试用例esmOutputCases/(EsmOutput.test.js): 用于测试 ES 模块输出功能的测试用例,包括基本输出、去冲突、动态导入、外部依赖、互操作、命名空间、保留模块、重新导出和代码分割场景multiCompilerCases/(MultiCompiler.test.js): 用于测试多编译器场景的测试用例- 增量测试 (
Incremental-node.test.js,Incremental-async-node.test.js,Incremental-web.test.js,Incremental-webworker.test.js,Incremental-watch.test.js): 用于测试针对不同环境的增量编译的测试用例 - 原生监听器测试 (
NativeWatcher.part1.test.js,NativeWatcher.part2.test.js,NativeWatcher.part3.test.js): 用于测试原生文件监听器功能的测试用例
支持目录
fixtures/: 通用测试文件和跨多个测试类型共享的 fixturesjs/: 测试执行期间生成的构建产物和临时文件,按测试类型组织(例如,js/normal、js/config、js/hot-{target})__snapshots__/: 各种测试类型的测试快照,包括 StatsOutput、HotSnapshot 和其他基于快照的测试
E2E 测试 (e2e/)
Rspack 的端到端测试,涵盖真实场景和集成测试:
cases/: 按功能区域组织的 E2E 测试用例(chunk、css、file、hooks、html、incremental、lazy-compilation、make、module-federation、persistent-cache、react、vue3、worker)fixtures/: E2E 测试的共享 fixtures 和工具utils/: E2E 测试执行的工具函数
基准测试 (bench/)
用于跟踪 Rspack JavaScript API 性能并防止性能退化的性能基准测试:
fixtures/: 基准测试 fixtures(例如,用于基准测试的ts-react项目)- 用于测量构建性能和 API 执行时间的基准测试文件

