The Vue plugin provides support for Vue 3 SFC (Single File Components). The plugin internally integrates vue-loader v17.
For Vue 3 JSX / TSX syntax, please use the Vue JSX plugin.
Install the plugin with this command:
npm add @rsbuild/plugin-vue -DRegister the plugin in your rsbuild.config.ts file:
import { pluginVue } from '@rsbuild/plugin-vue'; export default { plugins: [pluginVue()], };After registering the plugin, you can import *.vue SFC files in your code.
Customize Vue compilation behavior with these options:
Options passed to vue-loader. See the vue-loader documentation for detailed usage.
VueLoaderOptionsconst defaultOptions = { compilerOptions: { preserveWhitespace: false, }, experimentalInlineMatchResource: true, };pluginVue({ vueLoaderOptions: { hotReload: false, }, });When chunkSplit.strategy set to split-by-experience, Rsbuild will automatically split vue and router related packages into separate chunks by default:
lib-vue.js: includes vue, vue-loader, and their sub-dependencies (@vue/shared, @vue/reactivity, @vue/runtime-dom, @vue/runtime-core).lib-router.js: includes vue-router.This option is used to control this behavior and determine whether the vue and router related packages need to be split into separate chunks.
type SplitVueChunkOptions = { vue?: boolean; router?: boolean; };const defaultOptions = { vue: true, router: true, };pluginVue({ splitChunks: { vue: false, router: false, }, });/deep/ is a deprecated usage as of Vue v2.7. Since it is not a valid CSS syntax, CSS compilation tools like Lightning CSS will fail to compile it.
You can use :deep() instead. See Vue - Deep Selectors for more details.
<style scoped> .a :deep(.b) { /* ... */ } </style>You can also refer to Vue - RFC 0023 for more details.