output.autoExternal
- 类型:
- 默认值:
false
用于自动 external 根目录 package.json 中声明的依赖。开启后,Rsbuild 会读取 <root>/package.json 中的依赖字段,并将匹配到的包名转换为 output.externals 规则。
这个能力适用于 Node.js 或 SSR bundle 场景。例如,一些依赖需要由运行时加载,而不是被打进 bundle,包括观测 SDK、原生插件,或依赖运行时 instrumentation 的包。
output.autoExternal 默认关闭。在普通 Web 应用构建中,依赖通常需要被打进 bundle,浏览器才能直接运行产物。如果你在 Web target 中开启 output.autoExternal,需要确保被 external 的依赖能在运行时被提供,例如通过 CDN、import map 或宿主环境注入。
默认行为
当 output.autoExternal 为 true 时,以下依赖类型默认会被 external:
dependenciesoptionalDependenciespeerDependencies
以下依赖类型默认不会被 external:
devDependencies
它等价于如下配置:
子路径导入
Rsbuild 也会 external 匹配依赖的子路径导入。例如,如果 react 声明在 dependencies 中,下面两个导入都会被 external:
示例
开启自动 external
自定义依赖类型
关闭某类依赖
与 output.externals 的关系
output.externals 的优先级高于 output.autoExternal。你可以通过 output.externals 手动定制特定包的 external 格式,再通过 output.autoExternal 自动处理 package.json 中剩余的依赖。
在上面的例子中,react 会遵循手动配置的 output.externals,不会使用自动生成的 external 规则。
当 output.externals 使用对象形式配置时,Rsbuild 会跳过对象 key 中对应包名的自动 external 规则。例如,如果你在 output.externals 中配置了 react,Rsbuild 不会再为 react 或其子路径导入(如 react/jsx-runtime)生成自动 external 规则。如果你希望这些子路径导入仍然保持 external,也需要将它们添加到 output.externals 中。
对于数组、函数或正则表达式等更复杂的 output.externals 配置,Rsbuild 会将它们与 output.autoExternal 生成的规则合并。如果最终行为不符合预期,可以使用 DEBUG=rsbuild 或 rsbuild inspect 查看实际生效的 externals 配置。
当 output.target 为 web-worker 时,Rsbuild 会移除 externals 配置,因此 output.autoExternal 不会生效。这是因为 Web Worker 运行在独立的全局作用域中,无法访问主页面通过 CDN 脚本或宿主环境注入到 window 上的全局变量。

