PageSourceSearch

https://rspack.rs/static/js/async/route-e28771ecab83.ce20710641.js

js rspack.rs collected 2026-09-24 17:15:43 UTC 91,986 bytes, 1 lines download raw bytes

1"use strict";(self.rspackChunkrspack_website=self.rspackChunkrspack_website||[]).push([["c9"],{Dy(s,e,n){n.r(e);var i=n("i"),r=n("f"),o=n("V"),l=n("yW"),a=n("fm"),c=n("sX");function t(s){let e={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...s.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(e.h1,{id:"optimization",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimization",children:"#"}),"Optimization"]}),"\n",(0,i.jsxs)(e.p,{children:["优化:该选项用于自定义优化配置。你可以通过 ",(0,i.jsx)(e.a,{href:"/zh/config/optimization.html",children:"optimization"})," 来自定义优化配置。默认情况下,Rspack 会根据 ",(0,i.jsx)(e.a,{href:"/zh/config/mode.html",children:"mode"})," 来选择合适的优化配置。"]}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationavoidentryiife",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationavoidentryiife",children:"#"}),"optimization.avoidEntryIife"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"false"}]}),"\n",(0,i.jsxs)(e.p,{children:["使用 ",(0,i.jsx)(e.code,{children:"optimization.avoidEntryIife"})," 可以避免在需要时将入口模块包装在 IIFE 中(在 ",(0,i.jsx)(e.a,{href:"https://github.com/web-infra-dev/rspack/blob/main/crates/rspack_plugin_javascript/src/plugin/mod.rs",rel:"noopener noreferrer",target:"_blank",children:"rspack_plugin_javascript"})," 中搜索 ",(0,i.jsx)(e.code,{children:'"This entry needs to be wrapped in an IIFE because"'}),")。这种方法有助于优化 JavaScript 引擎的性能,并在构建 ESM 库时保证 tree shaking 生效。"]}),"\n",(0,i.jsxs)(e.p,{children:["目前,",(0,i.jsx)(e.code,{children:"optimization.avoidEntryIife"})," 只能优化单个入口模块及其他模块共存时的 IIFE。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    avoidEntryIife"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"warning",title:"Warning",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"optimization.avoidEntryIife"})," 选项可能会对构建性能产生负面影响,如果你更注重构建性能而不是这些优化,请考虑不要启用此选项。"]})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationchunkids",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationchunkids",children:"#"}),"optimization.chunkIds"]}),"\n",(0,i.jsx)(a.A,{type:"false | 'natural' | 'named' | 'deterministic' | 'compact-hashed' | 'size' | 'total-size'",defaultValueList:[{defaultValue:"'named'",mode:"development"},{defaultValue:"'deterministic'",mode:"production"}]}),"\n",(0,i.jsx)(e.p,{children:"设置 Rspack 在生成 Chunk id 时使用的算法。"}),"\n",(0,i.jsx)(e.p,{children:"支持以下字符串值:"}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"选项"}),(0,i.jsx)(e.th,{children:"描述"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'natural'"})}),(0,i.jsx)(e.td,{children:"根据 Chunk 加载的顺序使用自增数字作为 Chunk id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'named'"})}
1),(0,i.jsx)(e.td,{children:"使用有意义、方便调试的内容当作 Chunk id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'deterministic'"})}),(0,i.jsx)(e.td,{children:"简短的数字 id,在多次编译的场景下,会尽量保持其稳定性。适合长期缓存。默认使用 3 位数字。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'compact-hashed'"})}),(0,i.jsx)(e.td,{children:"使用稳定小写字母数字 hash 的最短可用前缀。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'size'"})}),(0,i.jsx)(e.td,{children:"使用让初始下载包大小更小的数字 id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'total-size'"})}),(0,i.jsx)(e.td,{children:"使用让总下载包大小更小的数字 id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"false"})}),(0,i.jsx)(e.td,{children:"禁用 Rspack 内置的 Chunk id 算法,允许自定义插件提供 Chunk id。"})]})]})]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    chunkIds"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'deterministic'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.code,{children:"compact-hashed"})," 选项使用稳定小写字母数字 hash 的最短可用前缀作为 Chunk id,兼顾长期缓存、产物体积和运行时性能。"]}),"\n",(0,i.jsx)(o.Pq,{type:"warning",title:"已废弃的别名",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"compat-hashed"})," 可在 Rspack 2.2.0 中使用,现已废弃,并于 Rspack 2.2.1 更名为 ",(0,i.jsx)(e.code,{children:"compact-hashed"}),"。旧名称目前仅作为兼容别名保留。"]})}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    chunkIds"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'compact-hashed'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"tip",title:"Tip",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"compact-hashed"})," 选项从 Rspack 2.2.1 开始支持。"]}
1)}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationconcatenatemodules",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationconcatenatemodules",children:"#"}),"optimization.concatenateModules"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:["开启模块拼接优化,允许将多个模块拼接成单个模块以降低产物体积,提升压缩效率。此优化需要开启 ",(0,i.jsx)(e.a,{href:"#optimizationprovidedexports",children:"optimization.providedExports"})," 和 ",(0,i.jsx)(e.a,{href:"#optimizationusedexports",children:"optimization.usedExports"}),"。默认情况下,",(0,i.jsx)(e.code,{children:"optimization.concatenateModules"})," 在 ",(0,i.jsx)(e.code,{children:"production"})," 模式下启用,其它模式则禁用。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    concatenateModules"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationemitonerrors",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationemitonerrors",children:"#"}),"optimization.emitOnErrors"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"false",mode:"production"},{defaultValue:"true",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:["开启 ",(0,i.jsx)(e.code,{children:"optimization.emitOnErrors"})," 时,即使编译过程中发生错误,Rspack 也会生成产物。这些错误会被注入到产物代码中,运行它们时会抛出错误。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    emitOnErrors"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationinlineexports",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationinlineexports",children:"#"}),"optimization.inlineExports"]}),"\n",(0,i.jsx)(l.a,{addedVersion:"1.7.0"}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsx)(e.p,{children:"对以下内容执行跨模块内联优化:"}),"\n",(0,i.jsxs)(e.ol,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"可被静态求值的顶层导出常量值:"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"null"})," 或 ",(0,i.jsx)(e.code,{children:"undefined"})]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"boolean"})," 值(",(0,i.jsx)(e.code,{children:"true"})," 或 ",(0,i.jsx)(e.code,{children:"false"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["长度 <= 6 的 ",(0,i.jsx)(e.code,{children:"number"})]}),"\n",(0,i.jsxs)(e.li,{children:["长度 <= 6 的 ",(0,i.jsx)(e.code,{children:"string"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsxs)(e.p,{children:["由 ",(0,i.jsx)(e.a,{href:"/zh/guide/features/builtin-swc-loader.html#collecttypescriptinfoexportedenum",children:(0,i.jsx)(e.code,{children:"builtin:swc-loader collectTypeScriptInfo.exportedEnum"})})," 收集的导出 TypeScript 枚举"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.p,{children:"这个优化有助于减少产物体积并可以提升运行时性能。"}),"\n",(0,i.jsxs)(e.p,{children:["常见的使用场景是 ",(0,i.jsx)(e.code,{children:"constants.js"})," 文件:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"// constants.js"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" A"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" B"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'hello'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"// index.js"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" { A"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" B } "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" './constants'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"("}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"A"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ?"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" 1"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" :"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" 2"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:");"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"("}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"B"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"length"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:");"})]})]})})}),"\n",(0,i.jsxs)(e.p,{children:["当启用 ",(0,i.jsx)(e.code,{children:"inlineExports"})," 时,常量值将被内联到使用位置:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"// 由 Rspack 打包后的输出:output.js"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" __webpack_modules__"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:"  './index.js'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" () "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"    // 常量被直接内联"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"    console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"("}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ?"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" 1"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" :"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" 2"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:");"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"    console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"("}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'hello'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"length"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:");"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"    // 如果 constants.js 的所有导出都被内联,该模块将被优化掉,"})}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"    // 不会出现在最终产物中"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"tip",title:"Tip",children:(0,i.jsxs)(e.p,{children:["\n由于此功能依è
1µ–模块导出使用信息(",(0,i.jsx)(e.a,{href:"#optimizationusedexports",children:"optimization.usedExports"}),"),建议仅在生产模式下启用,因为生产模式下 ",(0,i.jsx)(e.code,{children:"usedExports"})," 默认启用。"]})}),"\n",(0,i.jsx)(o.Pq,{type:"warning",title:"TDZ 行为",children:(0,i.jsx)(e.p,{children:"\n内联循环引用模块中的常量导出,可能会让原本会触发暂时性死区(TDZ)错误的代码不再报错。生态中大多数工具通常在进行优化时不会保留 TDZ 错误;Rspack 也遵循这种优化优先的行为。"})}),"\n",(0,i.jsxs)(e.p,{children:["更多详情,请参考 ",(0,i.jsx)(e.a,{href:"https://github.com/rstackjs/rstack-examples/tree/main/rspack/inline-const",rel:"noopener noreferrer",target:"_blank",children:"inline const 示例"}),"。"]}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationinnergraph",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationinnergraph",children:"#"}),"optimization.innerGraph"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.code,{children:"optimization.innerGraph"})," 告诉 Rspack 是否对变量传递进行更详细的分析,这有助于 Rspack 识别未使用的模块导出,从而减少打包产物的体积。"]}),"\n",(0,i.jsx)(e.p,{children:"例如:"}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" { value } "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'lib'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" value2"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" value;"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"function"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:" f1"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"() {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"  console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"(value);"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"}"})}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"function"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:" f2"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"() {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"  console"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".log"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"(value2);"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"}"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:["这里我们将 ",(0,i.jsx)(e.code,{children:"value"})," 赋值给了 ",(0,i.jsx)(e.code,{children:"value2"}),",",(0,i.jsx)(e.code,{children:"value2"})," 和 ",(0,i.jsx)(e.code,{children:"value"})," 也分别在函数 ",(0,i.jsx)(e.code,{children:"f2"})," 和 ",(0,i.jsx)(e.code,{children:"f1"})," 中被访问,但函数没有被调用,因此没有使用到 ",(0,i.jsx)(e.code,{children:"value2"})," 和 ",(0,i.jsx)(e.code,{children:"value"}),",因此 ",(0,i.jsx)(e.code,{children:"value"})," 的导入是可以被删除的。"]}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationmangleexports",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationmangleexports",children:"#"}),"optimization.mangleExports"]}),"\n",(0,i.jsx)(a.A,{type:"boolean | 'deterministic' | 'size'",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.code,{children:"optimization.mangleExports"})," 用于控制导出名的混淆方式。"]}
1),"\n",(0,i.jsx)(e.p,{children:"支持以下选项:"}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"option"}),(0,i.jsx)(e.th,{children:"description"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'size'"})}),(0,i.jsx)(e.td,{children:"使用尽可能短的导出名,以减小产物体积。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"'deterministic'"})}),(0,i.jsx)(e.td,{children:"使用短且稳定的导出名,以获得更好的长期缓存稳定性。生产模式默认启用该选项。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"true"})}),(0,i.jsxs)(e.td,{children:["与 ",(0,i.jsx)(e.code,{children:"'deterministic'"})," 相同。"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"false"})}),(0,i.jsx)(e.td,{children:"关闭导出名混淆,保留原始导出名。开发模式默认启用该选项。"})]})]})]}),"\n",(0,i.jsx)(e.p,{children:"例如源代码为:"}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"src/math.js",lang:"js",children:(0,i.jsx)(e.code,{children:(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" veryLongExportName"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" 1"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]})})})}),"\n",(0,i.jsxs)(e.p,{children:["关闭 ",(0,i.jsx)(e.code,{children:"mangleExports"})," 时,导出名会被保留:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"dist/main.js",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"__webpack_require__"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".d"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"(__webpack_exports__"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:"  veryLongExportName"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" () "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" veryLongExportName"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"});"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:["将 ",(0,i.jsx)(e.code,{children:"mangleExports"})," 设置为 ",(0,i.jsx)(e.code,{children:"'size'"})," 时,导出名会被缩短:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    mangleExports"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'size'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"dist/main.js",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"__webpack_require__"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".d"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"(__webpack_exports__"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:"  a"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" () "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" veryLongExportName"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"});"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationmergeduplicatechunks",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationmergeduplicatechunks",children:"#"}),"optimization.mergeDuplicateChunks"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true"}]}),"\n",(0,i.jsxs)(e.p,{children:["是否合并重复的 chunks,将 ",(0,i.jsx)(e.code,{children:"optimization.mergeDuplicateChunks"})," 设置成 ",(0,i.jsx)(e.code,{children:"false"})," 来关闭该优化。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    mergeDuplicateChunks"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationminimize",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationminimize",children:"#"}),"optimization.minimize"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:["是否使用 ",(0,i.jsx)(e.a,{href:"#optimizationminimizer",children:(0,i.jsx)(e.code,{children:"optimization.minimizer"})})," 中声明的压缩器对产物进行压缩。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    minimize"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationminimizer",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationminimizer",children:"#"}),"optimization.minimizer"]}),"\n",(0,i.jsx)(a.A,{type:"('...' | Plugin)[]",defaultValueList:[{defaultValue:"[new SwcJsMinimizerRs
1packPlugin(), new LightningCssMinimizerRspackPlugin()]"}]}),"\n",(0,i.jsxs)(e.p,{children:["自定义压缩器。默认使用 ",(0,i.jsx)(e.a,{href:"/zh/plugins/swc-js-minimizer-rspack-plugin.html",children:(0,i.jsx)(e.code,{children:"rspack.SwcJsMinimizerRspackPlugin"})})," 和 ",(0,i.jsx)(e.a,{href:"/zh/plugins/lightning-css-minimizer-rspack-plugin.html",children:(0,i.jsx)(e.code,{children:"rspack.LightningCssMinimizerRspackPlugin"})}),"。"]}),"\n",(0,i.jsxs)(e.p,{children:["当设置了 ",(0,i.jsx)(e.code,{children:"optimization.minimizer"})," 时,默认的压缩器会被禁用。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" TerserPlugin "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'terser-webpack-plugin'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    minimizer"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" ["}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:" TerserPlugin"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"()]"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(e.p,{children:"使用 Rspack 内置的压缩器,并自定义压缩选项:"}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" { rspack } "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" '@rspack/core'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"    // 当声明了 `optimization.minimizer`,默认压缩器会被禁用"})}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"    // 但你可以配合使用 '...',它代表默认压缩器"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    minimizer"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" ["})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"      new"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" rspack"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"}
1,children:".SwcJsMinimizerRspackPlugin"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"({"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"        minimizerOptions"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"          format"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"            comments"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"          }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"        }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"      })"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"      new"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" rspack"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:".LightningCssMinimizerRspackPlugin"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"({"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"        minimizerOptions"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"          errorRecovery"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"        }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"      })"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    ]"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationmoduleids",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationmoduleids",children:"#"}),"optimization.moduleIds"]}),"\n",(0,i.jsx)(a.A,{type:"false | 'natural' | 'named' | 'deterministic' | 'compact-hashed' | 'hashed'",defaultValueList:[{defaultValue:"'deterministic'",mode:"production"},{defaultValue:"'named'",mode:"development"},{defaultValue:"'natural'",mode:"none"}]}),"\n",(0,i.jsx)(e.p,{children:"设置 Rspack 在生成模块 id 时使用的算法。"}),"\n",(0,i.jsx)(e.p,{children:"支持以下字符串值:"}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"选项"}),(0,i.jsx)(e.th,{children:"描述"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"natural"})}),(0,i.jsx)(e.td,{children:"根据模块加载的顺序使用自增数字作为模块 id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"named"})}
1),(0,i.jsx)(e.td,{children:"使用有意义、方便调试的内容当作模块 id。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"deterministic"})}),(0,i.jsx)(e.td,{children:"使用对模块标识符哈希后的数字当作模块 id,有益于长期缓存。默认使用 3 位数字。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"compact-hashed"})}),(0,i.jsx)(e.td,{children:"使用稳定字母数字 hash 的最短可用前缀。"})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"hashed"})}),(0,i.jsxs)(e.td,{children:["使用模块标识符的哈希值作为模块 id。等同于使用默认选项(md4、base64、4 字符)的 ",(0,i.jsx)(e.code,{children:"HashedModuleIdsPlugin"})," 插件。"]})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:(0,i.jsx)(e.code,{children:"false"})}),(0,i.jsx)(e.td,{children:"禁用 Rspack 内置的模块 id 算法,允许自定义插件提供模块 id。"})]})]})]}),"\n",(0,i.jsxs)(e.p,{children:["推荐在开发环境使用 ",(0,i.jsx)(e.code,{children:"named"}),",在生产环境使用 ",(0,i.jsx)(e.code,{children:"deterministic"})," 或 ",(0,i.jsx)(e.code,{children:"compact-hashed"}),"。"]}),"\n",(0,i.jsxs)(e.p,{children:["通过 ",(0,i.jsx)(e.code,{children:"process.env.NODE_ENV"})," 来判断当前环境:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" isDev"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" process"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"env"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"NODE_ENV"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ==="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'development'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    moduleIds"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" isDev "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"?"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'named'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" :"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'deterministic'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.code,{children:"compact-hashed"})," 选项使用稳定字母数字 hash 的最短可用前缀作为模块 id,兼顾长期缓存、产物体积和运行时性能。"]}),"\n",(0,i.jsx)(o.Pq,{type:"warning",title:"已废弃的别名",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"compat-hashed"})," 可在 Rspack 2.2.0 中使用,现已废弃,并于 Rspack 2.2.1 更名为 ",(0,i.jsx)(e.code,{children:"compact-hashed"}),"。旧名称目前仅作为兼容别名保留。"]}
1)}),"\n",(0,i.jsx)(o.Pq,{type:"warning",title:"Warning",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"compact-hashed"})," 生成的模块 id 区分大小写且可能包含大写字母。在大小写不敏感的文件系统上,不要在 ",(0,i.jsx)(e.a,{href:"/zh/config/output.html#outputassetmodulefilename",children:"Asset module 文件名"}),"或 ",(0,i.jsx)(e.a,{href:"/zh/config/output.html#outputwebassemblymodulefilename",children:"WebAssembly 模块文件名"}),"中仅使用 ",(0,i.jsx)(e.code,{children:"[id]"})," 进行区分。请优先使用 ",(0,i.jsx)(e.code,{children:"[contenthash]"}),",或将其与 ",(0,i.jsx)(e.code,{children:"[id]"})," 一起使用。"]})}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" isDev"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" process"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"env"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"."}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"NODE_ENV"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" ==="}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'development'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:";"})]}),"\n",(0,i.jsx)(e.span,{className:"line"}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    moduleIds"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" isDev "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"?"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'named'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" :"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'compact-hashed'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"tip",title:"Tip",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"compact-hashed"})," 选项从 Rspack 2.2.1 开始支持。"]})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationnodeenv",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationnodeenv",children:"#"}),"optimization.nodeEnv"]}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"类型:"})," ",(0,i.jsx)(e.code,{children:"string | false"})]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"默认值:"})," 由 ",(0,i.jsx)(e.a,{href:"/zh/config/mode.html",children:(0,i.jsx)(e.code,{children:"mode"})})," 决定:","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsxs)(e.a,{href:"/zh/config/mode.html#production",children:[(0,i.jsx)(e.code,{children:"production"})," 模式"]}),":",(0,i.jsx)(e.code,{children:"'production'"})]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsxs)(e.a,{href:"/zh/config/mode.html#development",children:[(0,i.jsx)(e.code,{children:"development"})," 模式"]}),":",(0,i.jsx)(e.code,{children:"'development'"})]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsxs)(e.a,{href:"/zh/config/mode.html#none",children:[(0,i.jsx)(e.code,{children:"none"})," 模式"]}),":",(0,i.jsx)(e.code,{children:"false"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.code,{children:"optimization.nodeEnv"})," 用于控制 Rspack 在编译时替换 ",(0,i.jsx)(e.code,{children:"process.env.NODE_ENV"})," 所使用的值。Rspack 会通过 ",(0,i.jsx)(e.a,{href:"/zh/plugins/define-plugin.html",children:"DefinePlugin"})," 完成该替换。"]}),"\n",(0,i.jsxs)(e.p,{children:["你也可以使用以下值覆盖由 ",(0,i.jsx)(e.code,{children:"mode"})," 决定的默认行为:"]}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["任意字符串:将 ",(0,i.jsx)(e.code,{children:"process.env.NODE_ENV"})," 替换为指定的字符串。"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"false"}),":禁用替换,保留代码中的 ",(0,i.jsx)(e.code,{children:"process.env.NODE_ENV"}),"。"]}),"\n"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    nodeEnv"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'production'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationprovidedexports",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationprovidedexports",children:"#"}),"optimization.providedExports"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true"}]}),"\n",(0,i.jsxs)(e.p,{children:["开启后 Rspack 将会分析模块提供哪些导出,包括重导出模块,引用模块不存在的导出时会发出提示。默认情况下,",(0,i.jsx)(e.code,{children:"optimization.providedExports"})," 已启用,该分析会增加构建时间,你可以考虑在 development 模式中关闭该配置,关闭后有可能会遇到",(0,i.jsx)(e.a,{href:"/zh/guide/optimization/tree-shaking.html#%E9%87%8D%E5%AF%BC%E5%87%BA%E5%88%86%E6%9E%90",children:"SideEffects 章节"}),"运行时循环依赖的错误。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    providedExports"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationrealcontenthash",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationrealcontenthash",children:"#"}),"optimization.realContentHash"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsx)(e.p,{children:"在产物处理完成后,添加额外的哈希计算步骤根据产物的文件内容计算该产物的哈希。该功能在生产环境下会默认开启。"}),"\n",(0,i.jsxs)(e.p,{children:["如果将 ",(0,i.jsx)(e.code,{children:"realContentHash"})," 设置为 ",(0,i.jsx)(e.code,{children:"false"}),",则使用编译流程中的内部数据计算哈希,在某些情况下,即使产物内容完全一致也可能导致哈希变化。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    realContentHash"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationremoveemptychunks",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationremoveemptychunks",children:"#"}),"optimization.removeEmptyChunks"]}),"\n",(0,i.jsx)(a.A,{type:"boolean",defaultValueList:[{defaultValue:"true"}]}),"\n",(0,i.jsxs)(e.p,{children:["检测并移除打包过程中产生的空 Chunk。将 ",(0,i.jsx)(e.code,{children:"optimization.removeEmptyChunks"})," 设置为 ",(0,i.jsx)(e.code,{children:"false"})," 来禁用该优化。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    removeEmptyChunks"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationruntimechunk",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationruntimechunk",children:"#"}),"optimization.runtimeChunk"]}),"\n",(0,i.jsx)(a.A,{type:"boolean | 'single' | 'multiple' | { name?: string | ((entrypoint: { name: string }) => string) }",defaultValueList:[{defaultValue:"false"}]}),"\n",(0,i.jsxs)(e.p,{children:["用来控制 Rspack 的 ",(0,i.jsx)(e.a,{href:"/zh/misc/glossary.html#runtime",children:"runtime"})," chunk 如何生成。"]}),"\n",(0,i.jsxs)(e.p,{children:["默认为 ",(0,i.jsx)(e.code,{children:"false"}),",这意味着运行时代码会被内联到入口的 chunks 中。"]}),"\n",(0,i.jsxs)(e.p,{children:["设置为 ",(0,i.jsx)(e.code,{children:"true"})," 或 ",(0,i.jsx)(e.code,{children:"'multiple'"})," 会为每个入口添加一个仅包含运行时的额外 chunk。该设置等同于:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    runtimeChunk"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-function)"},children:"      name"}),(0,i.j
1sx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" (entrypoint) "}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" `runtime~"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"${"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:"entrypoint"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:".name"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"}"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:"`"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:["设置为 ",(0,i.jsx)(e.code,{children:"'single'"})," 会将所有入口的运行时代码抽离到一个名为 ",(0,i.jsx)(e.code,{children:"runtime"})," 的单独 chunk。该设置等同于:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    runtimeChunk"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"      name"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'runtime'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:["设置为对象时,可以提供可选的 ",(0,i.jsx)(e.code,{children:"name"})," 属性,该属性代表 runtime chunk 的名称。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    runtimeChunk"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-comment)"},children:"      // 这将生成一个名为 `my-name.js` 的 chunk"})}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"      name"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'my-name'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"tip",title:"Tip",children:(0,i.jsxs)(e.p,{children:["\n被导入的模块在每个 runtime chunk 中是单独初始化的,因此,如果你在单个页面中包含多个入口 chunks,请留意这种行为。你需要将 ",(0,i.jsx)(e.code,{children:"optimization.runtimeChunk"})," 设置为 ",(0,i.jsx)(e.code,{children:"'single'"})," 或使用其他配置,以保证页面仅包含一个 runtime 实例。"]})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationsideeffects",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationsideeffects",children:"#"}),"optimization.sideEffects"]}),"\n",(0,i.jsx)(a.A,{type:"boolean | 'flag'",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"'flag'",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:["如果你只希望 Rspack 使用手动指定的 ",(0,i.jsx)(e.code,{children:"sideEffects"}
1)," 标志(通过 ",(0,i.jsx)(e.code,{children:"package.json"})," 和 ",(0,i.jsx)(e.code,{children:"rules[].sideEffects"}),"),而不分析源代码,可以这样配置:"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    sideEffects"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'flag'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsxs)(e.p,{children:["配置为 ",(0,i.jsx)(e.code,{children:"flag"})," 会让 Rspack 仅识别 package.json 中的 ",(0,i.jsx)(e.code,{children:"sideEffects"})," 标志或者 ",(0,i.jsx)(e.a,{href:"/zh/config/module-rules.html#rulessideeffects",children:(0,i.jsx)(e.code,{children:"rules[].sideEffects"})}),"(模块配置中的规则),以跳过那些被标记为没有副作用但未被使用的模块。"]}),"\n",(0,i.jsxs)(e.p,{children:["配置为 ",(0,i.jsx)(e.code,{children:"true"})," 会让 Rspack 除了识别用户主动标记以外,还会尝试分析未被标记的 module 源码是否包含副作用。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    sideEffects"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" true"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(o.Pq,{type:"tip",title:"Tip",children:(0,i.jsxs)(e.p,{children:["\n",(0,i.jsx)(e.code,{children:"optimization.sideEffects"})," 依赖于启用 ",(0,i.jsx)(e.a,{href:"#optimizationprovidedexports",children:(0,i.jsx)(e.code,{children:"optimization.providedExports"})}),"。这在构建时会有一定的成本,但消除模块对性能有积极的影响,因为生成的代码更少。这个优化的效果取决于你的代码库,尝试使用它来获得可能的性能提升。"]})}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationsplitchunks",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationsplitchunks",children:"#"}),"optimization.splitChunks"]}),"\n",(0,i.jsx)(a.A,{type:"false | object"}),"\n",(0,i.jsxs)(e.p,{children:["Rspack 支持通过 ",(0,i.jsx)(e.code,{children:"optimization.splitChunks"})," 配置项来对 Chunk 进行拆分。"]}
1),"\n",(0,i.jsxs)(e.p,{children:["该优化选项默认情况下是开启的,你可以将其设为 ",(0,i.jsx)(e.code,{children:"false"})," 来关闭它。"]}),"\n",(0,i.jsxs)(e.p,{children:["有关配置此行为的可用选项,请参见 ",(0,i.jsx)(e.a,{href:"/zh/plugins/split-chunks-plugin.html",children:"SplitChunksPlugin"})," 页面。"]}),"\n",(0,i.jsxs)(e.h2,{id:"optimizationusedexports",children:[(0,i.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#optimizationusedexports",children:"#"}),"optimization.usedExports"]}),"\n",(0,i.jsx)(a.A,{type:"boolean | 'global'",defaultValueList:[{defaultValue:"true",mode:"production"},{defaultValue:"false",mode:"development"}]}),"\n",(0,i.jsxs)(e.p,{children:["告诉 Rspack 对每个模块确定使用的导出。这取决于 ",(0,i.jsx)(e.code,{children:"optimization.providedExports"}),"。\n",(0,i.jsx)(e.code,{children:"optimization.usedExports"})," 收集的信息被其他优化或代码生成使用,即不会为未使用的导出生成导出信息,当所有用法兼容时,导出名称会被缩短为单个字符标识符。压缩器中的死代码消除将受益于此,并且可以删除未使用的导出。"]}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    usedExports"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-constant)"},children:" false"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(e.p,{children:"如果需要在运行时取消使用的导出分析:"}),"\n",(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(e.pre,{className:"shiki css-variables",style:{backgroundColor:"var(--shiki-background)",color:"var(--shiki-foreground)"},tabIndex:"0",title:"rspack.config.mjs",lang:"js",children:(0,i.jsxs)(e.code,{children:[(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:" default"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  optimization"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:" {"})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"    usedExports"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-string-expression)"},children:" 'global'"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsxs)(e.span,{className:"line",children:[(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"  }"}),(0,i.jsx)(e.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,i.jsx)(e.span,{className:"line",children:(0,i.jsx)(e.span,{style:{color:"var(--shiki-foreground)"},children:"};"})})]})})}),"\n",(0,i.jsx)(c.A,{url:"https://webpack.docschina.org/configuration/optimization/"})]})}function d(){let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:e}={...(0,r.R)(),...s.components};return e?(0,i.jsx)(e,{...s,children:(0,i.jsx)(t,{...s})}):t(s)}d.__RSPRESS_PAGE_META={},d.__RSPRESS_PAGE_META["zh%2Fconfig%2Foptimization.mdx"]={toc:[{id:"optimizationavoidentryiife",text:"optimization.avoidEntryIife",depth:2},{id:"optimizationchunkids",text:"optimization.chunkIds",depth:2},{id:"optimizationconcatenatemodules",text:"optimization.concatenateModules",depth:2},{id:"optimizationemitonerrors",text:"optimization.emitOnErrors",depth:2},{id:"optimizationinlineexports",text:"optimization.inlineExports",depth:2},{id:"optimizationinnergraph",text:"optimization.innerGraph",depth:2},{id:"optimizationmangleexports",text:"optimization.mangleExports",depth:2},{id:"optimizationmergeduplicatechunks",text:"optimization.mergeDuplicateChunks",depth:2},{id:"optimizationminimize",text:"optimization.minimize",depth:2},{id:"optimizationminimizer",text:"optimization.minimizer",depth:2},{id:"optimizationmoduleids",text:"optimization.moduleIds",depth:2},{id:"optimizationnodeenv",text:"optimization.nodeEnv",depth:2},{id:"optimizationprovidedexports",text:"optimization.providedExports",depth:2},{id:"optimizationrealcontenthash",text:"optimization.realContentHash",depth:2},{id:"optimizationremoveemptychunks",text:"optimization.removeEmptyChunks",depth:2},{id:"optimizationruntimechunk",text:"optimization.runtimeChunk",depth:2},{id:"optimizationsideeffects",text:"optimization.sideEffects",depth:2},{id:"optimizationsplitchunks",text:"optimization.splitChunks",depth:2},{id:"optimizationusedexports",text:"optimization.usedExports",depth:2}],title:"Optimization",headingTitle:"Optimization",frontmatter:{description:"通过 optimization 来自定义优化配置"}},n.d(e,{default:()=>d})},yW(s,e,n){var i,r=n("i"),o=n("s"),l=n("V"),a=n("R"),c=((i={}).Deprecated="Deprecated",i.Removed="Removed",i.Experimental="Experimental",i);function t(s){let e,n=(0,o.u)(),i=`/${n}/misc/planning/future`,c=s.inline?a.A.tagInline:a.A.tag,t=s.inline?a.A.wrapperInline:a.A.wrapper;return(0,r.jsxs)("div",{className:`${t} rp-not-doc`,children:[s.addedVersion&&(0,r.jsx)("span",{className:`${c} ${a.A.added}`,children:(0,r.jsxs)(l.N_,{href:(e=s.addedVersion,`https://github.com/web-infra-dev/rspack/releases/tag/v${e.replace("v","")}`),children:["Added in v",s.addedVersion]})}),s.deprecatedVersion&&(0,r.jsx)("span",{className:`${c} ${a.A.deprecated}
1`,children:(0,r.jsxs)(l.N_,{href:i,children:["Deprecated in v",s.deprecatedVersion]})}),s.removedVersion&&(0,r.jsx)("span",{className:`${c} ${a.A.removed}`,children:(0,r.jsxs)(l.N_,{href:i,children:["Removed in v",s.removedVersion]})}),s.stability&&(0,r.jsxs)("div",{className:`${c} ${s.stability?a.A[s.stability.toLowerCase()]:""}`,children:["Stability: ",s.stability]}),s.specific&&s.specific.length>0&&(0,r.jsxs)("span",{className:`${c} ${a.A.specific}`,children:[s.specific.join("/")," ",s.specific.length>1?"specific":"only"]})]})}n.d(e,{a:()=>t,k:()=>c})},sX(s,e,n){var i=n("i"),r=n("s"),o=n("V");let l="https://creativecommons.org/licenses/by/4.0/",a={borderTop:"1px solid var(--rp-c-divider-light)",color:"var(--rp-c-text-2)",fontSize:"13px",marginTop:"48px",paddingTop:"16px"};e.A=s=>{let{url:e}=s;return"en"===(0,r.u)()?(0,i.jsxs)("p",{style:a,children:["This page is adapted from ",(0,i.jsx)(o.N_,{href:e,children:"webpack documentation"})," ","under the ",(0,i.jsx)(o.N_,{href:l,children:"CC BY 4.0"}),", with modifications."]}):(0,i.jsxs)("p",{style:a,children:["本页改编自 ",(0,i.jsx)(o.N_,{href:e,children:"webpack 文档"}),",遵循"," ",(0,i.jsx)(o.N_,{href:l,children:"CC BY 4.0"}),",且已作修改。"]})}},fm(s,e,n){var i=n("i"),r=n("s"),o=n("V");e.A=s=>{let{type:e,defaultValueList:n}=s,l=(0,r.u)();return(0,i.jsxs)("ul",{className:"list-disc pl-5 my-4 leading-7",children:[(0,i.jsxs)("li",{className:"[&:not(:first-child)]:mt-2",children:[(0,i.jsx)("span",{className:"font-semibold",children:"zh"===l?"类型:":"Type:"})," ",(0,i.jsx)("code",{children:e})]}),n?.length&&n.length>0&&(0,i.jsxs)("li",{className:"[&:not(:first-child)]:mt-2",children:[(0,i.jsx)("span",{className:"font-semibold",children:"zh"===l?"默认值:":"Default:"}),n.map((s,e)=>{let{defaultValue:n,mode:r}=s;return(0,i.jsxs)("span",{children:[e>0&&(0,i.jsx)("span",{children:", "}),r&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(o.N_,{style:{marginLeft:"4px"},href:`/config/mode#${r}`,children:[r," ","zh"===l?"模式":"mode"]})," ",(0,i.jsx)("span",{children:"zh"===l?"为":"is"})]}),(0,i.jsx)("code",{style:{marginLeft:"4px"},children:n})]},n)})]})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.