This chapter introduces how to specify which target environment should be supported.
By setting lib.syntax, you can choose the syntax to which JavaScript and CSS will be downgraded. You can use the query syntax from Browserslist. Rslib also supports common ECMAScript version numbers, such as ES2015
.
Rslib also supports using a .browserslistrc file to specify settings. Note that lib.syntax takes precedence over .browserslistrc
. If both are present, lib.syntax
will be used.
By default, the syntax is set to ESNext
, which will only supports only the latest version of mainstream browsers (Chrome / Firefox / Edge / macOS Safari / iOS Safari) or Node.js according to output.target.
Before dealing with compatibility issues, it is recommended that you understand the following background knowledge to better handle related issues. Check out the background knowledge on syntax transpilation and API polyfill.
Normally, we don't need to inject polyfill for npm packages, this step should be done on the web application framework side, but in some scenarios we need to inject polyfill in order to make our library run directly in low version browsers.
Note that this plugin does not transform your code syntax, it only injects polyfill for unsupported functions used in your code, importing them as normal functions instead of polluting the global. You need to install the core-js-pure dependency.
The polyfill relies on Babel to inject the polyfill code, so you need to install the Rsbuild Babel plugin and babel-plugin-polyfill-corejs3 to inject the polyfill code.
And install core-js-pure as the runtime relied code.
Configure the Babel plugin with polyfill options, set the targets field to specify the target browser version.
Check out babel-plugin-polyfill-corejs3 documentation for more details.
Normally, we don't need to use Node libs on the browser side. However, it is possible to use some Node libs when the code will run on both the Node side and the browser side, and Node Polyfill provides browser versions of polyfills for these Node libs.
By using @rsbuild/plugin-node-polyfill, Node core libs polyfills are automatically injected into the browser-side, allowing you to use these modules on the browser side with confidence.
Rslib uses @rsbuild/plugin-node-polyfill to provide the Node Polyfill feature.
Then add the plugin into the plugins field.
For projects with bundle
enabled, the Node Polyfill will be injected and included in the output.
For projects with bundle
disabled, polyfills are not injected into the output by default. To avoid inlining the polyfill in every module, the modules are externalized and need to be added to dependencies manually, follow these steps:
output.external
with resolvedPolyfillToModules
, which you can import from @rsbuild/plugin-node-polyfill. This will externalize the polyfill modules to the installed polyfill dependencies.With the following steps, every usage of the polyfill module will be replaced by the corresponding module in the externals
field. Checkout the
Check out the documentation of @rsbuild/plugin-node-polyfill, all the configurations are applicable for Rslib.