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 -D
Register 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.
VueLoaderOptions
const 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.