Vue

如何使用

Rspack 提供兩種解決方案來支援 Vue

  • 使用 Rsbuild:Rsbuild 提供對 Vue 3 和 Vue 2 的開箱即用支援,讓您可以快速建立 Vue 專案。詳情請參閱 「Rsbuild - Vue 3」「Rsbuild - Vue 2」
  • 手動設定 Rspack:您可以參考目前的文件,手動為 Vue 新增設定。

Vue 3

目前,Rspack 支援 Vue3。請確保您的 vue-loader 版本 >= 17.2.2,並依以下方式設定

rspack.config.js
const { VueLoaderPlugin } = require('vue-loader');

/** @type {import('@rspack/cli').Configuration} */
const config = {
  // ...
  plugins: [new VueLoaderPlugin()],
  module: {
    rules: [
      // ...
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          // Note, for the majority of features to be available, make sure this option is `true`
          experimentalInlineMatchResource: true,
        },
      },
    ],
  },
};
module.exports = config;

由於 Rspack 原生支援 CSS 模組的編譯,您不需要設定與 CSS 相關的 loader。此外,當您嘗試使用 CSS 預處理器(例如:less)時,您只需要新增以下設定

const config = {
  module: {
    rules: [
+      {
+        test: /\.less$/,
+        loader: "less-loader",
+        type: "css",
+      }
    ],
  },
};
module.exports = config;

此時,Rspack 將使用內建的 CSS 處理器進行後處理。

如果您不想產生 CSS 檔案,您也可以使用 css-loadervue-style-loader 的組合

module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/,
        use: ['vue-style-loader', 'css-loader', 'less-loader'],
        type: 'javascript/auto',
      },
    ],
  },
  experiments: {
    css: false, // At this point, you need to turn off `experiments.css` to adapt to the internal processing logic of `vue-loader`
  },
};

此外,由於 Rspack 內建 TS 支援,我們也預設支援 lang="ts" 設定

<script lang="ts">
  export default {
    // ...
  };
</script>

您可以參考相關範例 example-vue3

Vue 2

Rspack 已完成與 Vue2 的相容性(使用 vue-loader@15)。

設定 Vue2 專案時,請務必關閉 experiments.css 或在與 CSS 相關的規則中使用 Rule.type = "javascript/auto"

rspack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['vue-style-loader', 'css-loader'],
        type: 'javascript/auto',
      },
      {
        test: /\.ts$/, // add this rule when you use TypeScript in Vue SFC
        loader: 'builtin:swc-loader',
        options: {
          jsc: {
            parser: {
              syntax: 'typescript',
            },
          },
        },
        type: 'javascript/auto',
      },
    ],
  },
  experiments: {
    css: false,
  },
};

使用 Rspack 的原生 builtin:swc-loader 支援 TypeScript,詳情請參閱 此處

您可以參考相關範例 example-vue2example-vue2-ts

Vue 3 JSX

由於 Rspack 支援使用 babel-loader,您可以直接使用 @vue/babel-plugin-jsx 外掛來支援 Vue 3 JSX 語法。

安裝

首先,您需要安裝 babel-loader@babel/core@vue/babel-plugin-jsx

npm
yarn
pnpm
bun
npm add babel-loader @babel/core @vue/babel-plugin-jsx -D

設定

然後新增以下設定,以在 .jsx 檔案中支援 Vue 3 JSX 語法

rspack.config.js
/**
 * @type {import('@rspack/cli'). Configuration}
 */
module.exports = {
  context: __dirname,
  entry: {
    main: './src/index.jsx',
  },
  module: {
    rules: [
      {
        test: /\.jsx$/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              plugins: ['@vue/babel-plugin-jsx'],
            },
          },
        ],
      },
    ],
  },
};

Rspack 提供一個 Vue JSX 範例供您參考。