本节介绍如何指定支持的目标环境。
在 Rslib 中,你可以通过设置 lib.syntax 来选择 JavaScript 和 CSS 将被降级到的语法。该配置支持直接设置 ECMAScript 版本,例如 es2015
、es2022
等,也支持设置 Browserslist 的查询语法,例如 last 2 versions
、> 1%
、node >= 16
、chrome >= 80
等。
默认情况下,syntax 被设置为 ESNext
,这代表将仅支持主流浏览器(Chrome / Firefox / Edge / macOS Safari / iOS Safari)或 Node.js 的最新版本,具体取决于 output.target。
需要注意的是,Rslib 不会读取 Browserslist 的相关配置文件(例如 .browserslistrc
或 package.json
中的 browserslist
字段)。你可以通过设置 output.overrideBrowserslist 进行覆盖,该配置比 lib.syntax 拥有更高的优先级。
在处理兼容性问题之前,建议了解以下背景知识,以便更好地处理相关问题。请查看有关 语法降级和 API 降级 的背景知识。
通常,我们不需要为 npm 包注入 polyfill,这个步骤应该在 web 应用框架侧完成,但在某些场景下,我们需要注入 polyfill 以使我们的库直接在低版本浏览器中运行。
需要注意的是,这个插件不会转换你的代码语法,它只会为代码中使用的未支持函数注入 polyfill,将它们作为普通函数导入,而不是污染全局。你需要安装 core-js-pure 依赖。
polyfill 依赖于 Babel 注入 polyfill 代码,因此你需要安装 Rsbuild Babel 插件 和 babel-plugin-polyfill-corejs3 来注入 polyfill 代码。
并安装 core-js-pure 作为运行时依赖代码。
配置 Babel 插件,设置 targets 字段以指定目标浏览器版本。
更多详细信息,请查看 babel-plugin-polyfill-corejs3 文档。
通常,我们不需要在浏览器侧使用 Node 库。然而,在某些情况下,代码将在 Node 侧和浏览器侧运行,Node Polyfill 提供了这些 Node 库的浏览器版本 polyfill。
通过使用 @rsbuild/plugin-node-polyfill,Node 核心库的 polyfill 会自动注入到浏览器侧,允许你在浏览器侧使用这些模块。
Rslib 使用 @rsbuild/plugin-node-polyfill 提供 Node Polyfill 功能。
然后将其添加到插件字段中。
对于启用了 bundle
的项目,Node Polyfill 将被注入并包含在输出中。
对于未启用 bundle
的项目,默认情况下不会注入 polyfill。为了避免在每个模块中内联 polyfill,模块需要被 external,并手动添加到依赖中,请按照以下步骤操作:
output.external
和 resolvedPolyfillToModules
,你可以从 @rsbuild/plugin-node-polyfill 导入。这将 polyfill 模块 external 到已安装的 polyfill 依赖中。通过以下步骤,每个 polyfill 模块的使用将被替换为 externals
字段中的相应模块。更多详细信息,请查看
更多详细信息,请查看 @rsbuild/plugin-node-polyfill 文档,所有配置均适用于 Rslib。