close
logologo
指南
配置
插件
API
社区
版本
更新日志
Rsbuild 0.x 文档
English
简体中文
指南
配置
插件
API
社区
更新日志
Rsbuild 0.x 文档
English
简体中文
logologo

插件列表

总览
React 插件
SVGR 插件
Vue 插件
Preact 插件
Svelte 插件
Solid 插件
Babel 插件
Sass 插件
Less 插件
Stylus 插件

开发

插件开发
插件 API
插件 hooks
📝 在 GitHub 上编辑此页
上一页SVGR 插件
下一页Preact 插件

#Vue 插件

Source

Vue 插件提供了对 Vue 3 SFC(单文件组件)的支持,插件内部集成了 vue-loader v17 版本。

TIP

对于 Vue 3 JSX / TSX 语法,请使用 Vue JSX 插件。

#快速开始

#安装插件

你可以通过如下的命令安装插件:

npm
yarn
pnpm
bun
npm add @rsbuild/plugin-vue -D

#注册插件

你可以在 rsbuild.config.ts 文件中注册插件:

rsbuild.config.ts
import { pluginVue } from '@rsbuild/plugin-vue';

export default {
  plugins: [pluginVue()],
};

注册插件后,你可以在代码中引入 *.vue 单文件组件。

#选项

如果你需要自定义 Vue 的编译行为,可以使用以下配置项。

#vueLoaderOptions

传递给 vue-loader 的选项,请查阅 vue-loader 文档 来了解具体用法。

  • 类型: VueLoaderOptions
  • 默认值:
const defaultOptions = {
  compilerOptions: {
    preserveWhitespace: false,
  },
  experimentalInlineMatchResource: true,
};
  • 示例:
pluginVue({
  vueLoaderOptions: {
    hotReload: false,
  },
});

#splitChunks

在 chunkSplit.strategy 设置为 split-by-experience 时,Rsbuild 默认会自动将 vue 和 router 相关的包拆分为单独的 chunk:

  • lib-vue.js:包含 vue、vue-loader,以及它们的子依赖(@vue/shared,@vue/reactivity,@vue/runtime-dom,@vue/runtime-core)。
  • lib-router.js:包含 vue-router。

该选项用于控制这一行为,决定是否需要将 vue 和 router 相关的包拆分为单独的 chunk。

  • 类型:
type SplitVueChunkOptions = {
  vue?: boolean;
  router?: boolean;
};
  • 默认值:
const defaultOptions = {
  vue: true,
  router: true,
};
  • 示例:
pluginVue({
  splitChunks: {
    vue: false,
    router: false,
  },
});

#常见问题

#/deep/ 选择器导致编译报错

/deep/ 是从 Vue v2.7 开始废弃的用法,它不是一个合法的 CSS 语法,因此在编译时,Lightning CSS 等 CSS 编译工具会抛出错误。

你可以使用 :deep() 代替它,更多用法参考 Vue - Deep Selectors。

<style scoped>
  .a :deep(.b) {
    /* ... */
  }
</style>

你也可以参考 Vue - RFC 0023 了解更多。