Object | Functionconst defaultOptions = {
postcssOptions: {
config: false,
sourceMap: rsbuildConfig.output.sourceMap.css,
},
};Rsbuild integrates PostCSS by default. You can configure postcss-loader through tools.postcss.
When tools.postcss is a function, the default options will be passed in as the first parameter. You can directly modify this object or return a new object as the final options. For example:
For example, to add a PostCSS plugin, you can call the addPlugins utility function:
export default {
tools: {
postcss: (opts, { addPlugins }) => {
addPlugins(require('postcss-px-to-viewport'));
},
},
};To pass parameters to the PostCSS plugin, call the PostCSS plugin as a function:
export default {
tools: {
postcss: (opts, { addPlugins }) => {
const viewportPlugin = require('postcss-px-to-viewport')({
viewportWidth: 375,
});
addPlugins(viewportPlugin);
},
},
};You can also modify the default postcss-loader options:
export default {
tools: {
postcss: (opts) => {
opts.sourceMap = false;
},
},
};tools.postcss can return a config object and completely replace the default config:
export default {
tools: {
postcss: () => {
return {
postcssOptions: {
plugins: [require('postcss-px-to-viewport')],
},
};
},
},
};When tools.postcss is an object, it will be merged with the default configuration using Object.assign. Note that Object.assign is a shallow copy and will completely overwrite the built-in presets or plugins array, please use it with caution.
export default {
tools: {
postcss: {
// As `Object.assign` is used, the default postcssOptions will be overwritten.
postcssOptions: {
plugins: [require('postcss-px-to-viewport')],
},
},
},
};(plugins: PostCSSPlugin | PostCSSPlugin[]) => voidFor adding additional PostCSS plugins, You can pass in a single PostCSS plugin, or an array of PostCSS plugins.
export default {
tools: {
postcss: (config, { addPlugins }) => {
// Add a PostCSS Plugin
addPlugins(require('postcss-preset-env'));
// Add multiple PostCSS Plugins
addPlugins([require('postcss-preset-env'), require('postcss-import')]);
},
},
};tools.postcss.postcssOptions can be set to a function, which receives the Rspack's loaderContext as a parameter. This allows you to use different PostCSS options for different file paths.
For example, use postcss-plugin-a for file paths containing foo, and use postcss-plugin-b for other file paths:
export default {
tools: {
postcss: {
postcssOptions: (loaderContext) => {
if (/foo/.test(loaderContext.resourcePath)) {
return {
plugins: [require('postcss-plugin-a')],
};
}
return {
plugins: [require('postcss-plugin-b')],
};
},
},
},
};
If the project contains a postcss.config.* config file, its content will be merged with tools.postcss.postcssOptions, and the latter's priority is higher. The plugins array will be merged into a single array.
Rsbuild uses the PostCSS v8. When you use third-party PostCSS plugins, please pay attention to whether the PostCSS version is compatible. Some legacy plugins may not work in PostCSS v8.
Rsbuild uses postcss-load-config to load PostCSS config files and merge them with the default config.
Rsbuild internally sets the postcss-loader's postcssOptions.config option to false to avoid loading config files repeatedly.