For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/config/default-behavior.md.
close
  • 简体中文
  • 默认行为

    Rslib 基于 Rsbuild 和 Rspack,并针对库构建场景调整了一些默认行为。

    这些默认行为通常取决于 formatbundleoutput.target 等配置,以及 package.jsontsconfig.json 文件中的部分属性,你可以通过配置和插件调整这些行为。

    环境变量

    Rslib 在构建库代码时,会根据 format 选择将源代码中的 process.env.NODE_ENV 表达式保留在产物中,或在构建时替换为指定值:

    产物格式默认行为
    esm / cjs保留表达式,交给使用方的应用在二次构建时替换和优化,或在直接运行时根据实际环境变量选择分支。
    umd / iife直接加载,在库构建时替换为构建进程的 NODE_ENV,默认为 'production'
    mf直接加载,默认在 mf-dev 时替换为 'development',在 build 时替换为 'production'

    你可以通过 source.define 显式指定替换值,或通过 tools.rspack 配置 Rspack 的 optimization.nodeEnv 来调整或关闭替换。

    有关其他预设环境变量、.env 文件的加载规则及变量替换方式,请参阅 环境变量

    格式、入口和依赖

    不同 format 对应的默认设置如下:

    格式output.targetoutput.autoExternal支持 bundle: false
    esm'node'true
    cjs'node'true
    umd'node'false
    iife'node'false
    mf'web'false
    Note

    output.autoExternal 对 JavaScript 依赖的自动 external 仅在 bundle 模式下生效。

    formatoutput.target 分别指定模块格式和目标运行环境。构建面向浏览器的库时,将 output.target 设置为 'web',MF 格式还需要添加 Module Federation 插件

    结合产物格式、目标环境和 bundle 配置,Rslib 对入口、目录结构和依赖采用以下默认处理:

    功能默认行为相关链接
    入口bundle 模式查找 src/index;bundleless 模式匹配 src/**,保留文件结构。source.entrybundle
    目录结构bundleless 模式以输入文件(不含类型声明文件)的最长公共目录为基础,保留相对目录结构。outBase
    模块引用bundleless 模式将本地 JS、样式和资源引用改为相对产物路径,并补全或替换扩展名;包名引用保留。redirect.jsredirect.styleredirect.asset
    自动 externalbundle 模式下,ESM/CJS 将 dependenciesoptionalDependenciespeerDependencies 及其子路径设为 external,不含 devDependenciesoutput.autoExternaloutput.externals
    external 类型ESM:modern-module;CJS:commonjs-import;UMD:umd;IIFE/MF:globaloutput.externalsexternalsType
    Node.js 内置模块output.target'node' 时,设置 externalsPresets.node: false,显式将内置模块设为 external,使其使用对应格式的 externalsType,匹配 import / require 的引用语义;不受 output.autoExternal 开关影响。output.externalsexternalsPresets.nodeexternalsType

    语法和模块兼容性

    功能默认行为相关链接
    语法目标output.target'node' 时,优先采用 package.json#engines.node 的最低版本;无法推导或 output.target'web' 时,使用 esnextsyntax
    语法转换根据 syntax 及其默认值设置 Rsbuild 的 output.overrideBrowserslist,控制 JavaScript 和 CSS 的语法转换,同时设置 Rspack 的 target,控制运行时代码语法(esnext 对应 es2025)。默认不读取项目的 .browserslistrcpackage.json#browserslistsyntaxoutput.overrideBrowserslisttarget
    变量声明output.target'web' 时,移除 Rsbuild 的 output.environment.const: false 预设,避免强制生成 varoutput.environment
    依赖编译默认跳过 node_modules 中 JavaScript 文件的 SWC 编译,但仍编译 TypeScript 和 JSX 文件。source.includesource.exclude
    路径别名支持读取 tsconfig.json 中的 compilerOptions.pathsresolve.alias,默认 compilerOptions.paths 的优先级更高。resolve.aliasresolve.aliasStrategy
    TypeScript 导入支持用 JavaScript 扩展名导入 TypeScript 文件,如 .js 可解析到 .ts.tsxresolve.extensionAlias
    扩展名解析省略导入扩展名时,依次尝试 .ts.tsx.mjs.js.jsx.jsonresolve.extensions
    装饰器tsconfig.json 启用 experimentalDecorators 时使用 legacy,否则使用 2023-11source.decorators
    JSX默认支持将 JSX 转换为 JavaScript,bundleless 模式下还支持保留 JSX 语法。JSX 转换
    动态模块路径ESM/CJS 保留动态路径的 import() / require()require.resolve() 和作为值的 require;静态路径的 import() 仍可分包。module.parser.javascript.importDynamic
    module.parser.javascript.requireDynamic
    module.parser.javascript.requireResolve
    module.parser.javascript.requireAsExpression
    模块类型识别保留 Rspack 按扩展名和 package.json#type 识别模块类型的默认行为,如 .mjs 文件按 javascript/esm 处理。Rsbuild 对进入 SWC 编译规则的 JavaScript、TypeScript 和 JSX 文件设置 type: 'javascript/auto',Rslib 移除该预设。module.rules
    CommonJS 导出ESM/CJS 设置 commonjs.exports: 'skipInEsm',保留 ESM 源文件中的 module.exportsexports 赋值。module.parser.javascript.commonjs
    CommonJS shimsCJS 默认兼容 import.meta.urlimport.meta.dirnameimport.meta.filenameshims.cjs
    ESM shims__dirname__filenamerequire shims 默认关闭。shims.esm
    SWC helpersexternalHelpers: false,默认内联所需的辅助函数。Rsbuild 则在 SWC 编译阶段从 @swc/helpers 导入。externalHelpers
    Polyfillsoutput.polyfill: 'off',不自动补齐运行时 API。output.polyfill产物兼容性

    优化和分包

    Rslib 通过 Rsbuild 的 mode 配置选择构建和优化策略:

    • rslibrslib --watch 使用 'production',watch 只增加文件监听和重新构建。
    • rslib mf-dev 使用 'development',用于 MF 开发服务。

    mode 是独立于构建进程 NODE_ENV 的配置。例如,执行 NODE_ENV=development rslib 时,构建仍使用 mode: 'production'

    Rslib 在此基础上调整了以下优化默认值:

    功能默认行为相关链接
    压缩生产模式下清理死代码和未使用代码,保留变量名和 Pure 注解。
    ESM/CJS/UMD/IIFE 保留代码格式;MF 删除多余的空白和换行,并关闭顶层未使用代码消除,以保留 remote entry 全局变量。
    output.minify
    分包splitChunks.preset: 'none';ESM/CJS 仅从异步 chunk 提取公共代码;UMD/IIFE 关闭分包和异步 chunk。splitChunksoptimization.splitChunksoutput.asyncChunks
    模块 ID非 MF 格式:output.target'node' 时使用 'named',便于调试;output.target'web' 时使用 'deterministic',保持 ID 稳定。
    MF:mode'production' 时使用 'deterministic',为 'development' 时使用 'named'
    optimization.moduleIds
    Chunk ID沿用 Rspack:生产模式使用 'deterministic',开发模式使用 'named'optimization.chunkIds
    ESM 产物优化concatenateModules: falsesideEffects: trueavoidEntryIife: true,配合 modern-module 输出,便于下游 tree shaking。optimization.concatenateModulesoptimization.sideEffectsoptimization.avoidEntryIife
    共享 runtimeESM 在 bundleless 或多个显式入口时设置 runtimeChunk: { name: 'rslib-runtime' },复用运行时代码。optimization.runtimeChunk
    Note
    • 手动设置 output.minify替换整套默认压缩配置,即使只设置对象中的部分选项,也不会继承上述预设。output.minify: false 只关闭压缩器,Rspack 仍会分析导出的使用情况和副作用,但可能保留未使用的声明。
    • splitChunks.preset: 'none' 不保证只生成一个文件:动态导入、多个入口、Worker 和运行时代码都可能产生额外文件。

    产物文件

    功能默认行为相关链接
    输出目录根目录为 dist,JS/CSS 直接放在其中;静态资源按类型分目录。output.distPath
    JavaScript 扩展名autoExtension: true,按格式和 package.json#type 选择 .js.mjs.cjsautoExtensionoutput.filename
    文件名 hash非 MF 格式不加 hash,保持文件名稳定;MF 在生产模式下默认在 JS/CSS 文件名中添加 hash 值,开发模式下不添加。output.filenameHash
    JavaScript 文件名非 MF 格式使用 [name] 加自动扩展名,如 [name].mjs;启用 filenameHash: true 时加入 [contenthash:10]output.filenameoutput.filenameHash
    chunk 文件名入口文件和异步 chunk 的文件名默认由 Rsbuild 的 output.filename.js 配置统一设置。
    配置多个 lib 时,非 MF 辅助 chunk 和异步 chunk 按 lib 数组中各对象的顺序添加后缀,第一个为 ~0,第二个为 ~1,以此类推,避免文件冲突;入口文件名不变。自定义文件名函数时不添加后缀,异步 chunk 也使用该函数。
    Rsbuild output.filenameRspack output.filenameoutput.chunkFilename
    库导出类型output.library.type:ESM 为 'modern-module',并设置 output.module: true;CJS 为 'commonjs-static';UMD 为 'umd';IIFE 为 'module',并设置 output.iife: trueoutput.library.typeoutput.iifeoutput.module
    UMD 导出名称format'umd' 时,设置 output.library.type: 'umd',并将 umdName 作为 Rspack 的 output.library.name,默认不设置名称。umdNameoutput.library.name
    Chunk 格式和加载ESM:chunkFormat: falsechunkLoading: 'import';CJS:chunkFormat: 'commonjs'chunkLoading: 'require'iife: falseoutput.chunkFormatoutput.chunkLoadingoutput.iife
    IIFE 全局对象output.globalObject: 'globalThis',用于访问全局外部依赖。output.globalObject
    清理产物output.cleanDistPath: 'auto',构建前仅清理项目根目录内的产物子目录。output.cleanDistPath
    Source map生产构建不生成 JS/CSS source map;MF 开发模式生成 JS source map。output.sourceMap
    HTMLtools.htmlPlugin: false,不生成 HTML。tools.htmlPlugin
    MF 输出output.uniqueName 来自 package.json#namemf-dev 产物默认写入磁盘。output.uniqueNamedev.writeToDisk

    静态资源

    功能默认行为相关链接
    JavaScript 中的资源引用ESM/CJS 使用 assetPrefix: 'auto',输出资源并保留 import/require;其他格式使用 '/'output.assetPrefix
    资源内联ESM/CJS 不内联资源(阈值为 0);其他格式沿用 Rsbuild 的 4 KiB 阈值。output.dataUriLimit
    new URL()ESM 处理静态 new URL(..., import.meta.url),输出原始资源并改为相对产物路径。new URL 引用
    WorkerESM 将 new Worker(new URL(...)) 的引用构建为 ES 模块 Worker,并设置 type: 'module'
    workerChunkLoading:ESM 使用 'import',CJS 使用 'async-node'
    Web Workersmodule.parser.javascript.workeroutput.workerChunkLoading
    WasmESM bundle 模式使用 compile,生成加载代码;bundleless 使用 preserve,保留引用并复制文件。wasm.mode

    CSS

    功能默认行为相关链接
    CSS 输出output.target'web' 时输出 CSS,为 'node' 时不输出;output.injectStyles: false,CSS 独立成文件。output.emitCssoutput.injectStyles
    样式引用提取 CSS 时,bundle 模式合并样式并移除 JS 中的样式导入;bundleless 按源文件输出并保留引用。bundleCSS
    CSS Modules默认匹配 .module.*;bundleless 生成类名映射的 JS 模块,并由它引用 CSS。output.cssModules
    CSS 中的资源和引用ESM/CJS 解析 CSS url() 并输出相对资源路径;bundleless 设置 tools.cssLoader.import: false,保留 CSS @importredirect.styleCSS 中的资源引用tools.cssLoader
    CSS 压缩默认关闭,留给使用方统一优化。output.minify

    类型声明

    Rslib 默认不生成类型声明文件。开启 dts: true 后,默认生成未打包的类型文件,与 JavaScript 的 bundle 设置无关。多份 JavaScript 产物可以共用类型文件,通常只需在一个 lib 项中开启 dts

    功能默认行为相关链接
    生成方式根据项目安装的 TypeScript 版本选择生成方式:5/6 使用 Compiler API,7+ 使用 native TypeScript CLI。dts.typescriptPathdts.isolateddts.tsgo
    输入范围默认按 tsconfig.json 的输入范围生成声明,目录结构由 rootDir 决定。source.tsconfigPath
    输出目录优先级:dts.distPathtsconfig.json#declarationDir → JS 产物根目录。dts.distPath
    打包dts.bundle: false;开启后由 API Extractor 按入口打包。dts.bundle
    依赖处理打包类型文件时,根据 output.autoExternaloutput.externals 确定 external,将其余直接依赖的类型文件一起打包,默认排除 @types/reactdts.bundle.bundledPackagesoutput.autoExternaloutput.externals
    扩展名dts.autoExtension: false,默认使用 .d.ts;未打包时,.mts.cts 源文件分别生成 .d.mts.d.ctsdts.autoExtension
    导入路径redirect.dts.pathredirect.dts.extension 默认均为 true,将路径别名转为相对路径,并补全或替换引用中的 JavaScript 扩展名。redirect.dts.pathredirect.dts.extension
    路径别名默认读取 tsconfig.jsoncompilerOptions.paths;设置 dts.alias 时,同名别名优先使用 dts.aliasdts.alias
    类型错误dts.abortOnError: true,声明生成错误使构建失败。dts.abortOnError
    项目引用dts.build: false,不自动构建 TypeScript 项目引用。dts.build

    构建性能与产物体积

    功能默认行为相关链接
    持久化缓存默认开启;Rsbuild 默认关闭。performance.buildCache
    产物体积日志bundleless 模式只打印文件总数和总体积。performance.printFileSize

    调整和检查配置

    所有产物共用的配置放在顶层,单个产物的配置放在对应的 lib 项中。lib 中的配置优先于顶层配置,再由这些配置决定对应的默认处理。CLI 中显式指定的构建参数会覆盖配置文件中的对应选项,详见 CLI

    对象通常递归合并,数组通常追加;resolve.extensions 等选项则整体覆盖,具体规则见 配置合并规则。通过 mergeRslibConfig 合并多份配置时,lib 中相同 id 的项会合并,没有 id 的项会追加。

    表格中的 Rspack 配置项可以通过 tools.rspack 调整,用法请查看该配置文档,其他 Rslib 与 Rsbuild 配置项可以查看 配置总览

    你可以开启 调试模式,或运行 rslib inspect 命令来查看最终生成的配置。