You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt 3 + Vuetify 3 自定义SASS变量配置无效求助

Nuxt3 + Vuetify3 自定义SASS变量不生效问题修复

环境依赖

{
  "vuetify": "^3.1.4",
  "nuxt": "^3.1.2",
  "vite-plugin-vuetify": "^1.0.2",
  "@mdi/font": "^7.1.96",
  "sass": "^1.58.0"
}

问题现象

自定义主题颜色可正常生效,但通过@use "vuetify/settings" with (...)设置的SASS变量(如根字体大小、排版样式等)完全被忽略。

当前配置代码

1. assets/styles/config.scss

@use "vuetify/settings" with (
  $font-size-root: 20px,
  $heading-font-family: Space Grotesk,
  $body-font-family: $font,
  $color-pack: false,
  $utilities: false,
  $typography: (
    "h1": (
      "size": 2rem,
      "weight": 500,
      "line-height": 2.2rem,
      "letter-spacing": 0,
      "font-family": Comic Sans,
      "text-transform": none,
    ),
  )
);

2. plugins/vuetify.ts

import "@/assets/styles/config.scss";

import { createVuetify } from "vuetify";

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(
    createVuetify({
      ssr: true,
      styles: { configFile: "assets/styles/config.scss" },
      theme: {
        defaultTheme: "light",
        themes: {
          dark: false,
          light: {
            colors: {
              primary: "#4093ff",
              secondary: "#4d4d4d",
              success: "#25c760",
              warning: "#ffc82e",
              error: "#ff4c29",
            },
          },
        },
      },
    })
  );
});

3. nuxt.config.ts

import vuetify from "vite-plugin-vuetify";

export default defineNuxtConfig({
  css: ["vuetify/lib/styles/main.sass", "@mdi/font/css/materialdesignicons.min.css", "@/assets/styles/config.scss"],
  build: {
    transpile: ["vuetify"],
  },
  modules: [
    // @ts-ignore
    async (options, nuxt) => {
      nuxt.hooks.hook("vite:extendConfig", (config) => config.plugins.push(vuetify()));
    },
  ],

  vite: {
    ssr: {
      noExternal: ["vuetify"],
    },
  },
});

修复步骤

1. 移除重复的配置文件引入

在nuxt.config.ts的css数组中,移除自定义config.scss的引入(避免与vite-plugin-vuetify的配置冲突):

// nuxt.config.ts
css: ["vuetify/lib/styles/main.sass", "@mdi/font/css/materialdesignicons.min.css"],

2. 正确配置vite-plugin-vuetify

修改modules中的插件初始化逻辑,传入自定义配置文件参数:

// nuxt.config.ts
modules: [
  async (_options, nuxt) => {
    nuxt.hooks.hook("vite:extendConfig", (config) => {
      config.plugins.push(
        vuetify({
          styles: {
            configFile: "assets/styles/config.scss",
          },
        })
      );
    });
  },
],

3. 删除插件中重复的配置文件引入

在plugins/vuetify.ts中,移除手动引入的config.scss(vite-plugin-vuetify会自动处理):

// import "@/assets/styles/config.scss"; // 删除这一行

4. 修正SASS变量的语法问题

  • 字体名建议添加引号,避免编译异常
  • 替换未定义的$font变量为实际字体名:
// assets/styles/config.scss
@use "vuetify/settings" with (
  $font-size-root: 20px,
  $heading-font-family: "Space Grotesk",
  $body-font-family: "Arial, sans-serif", // 替换为你的实际字体
  $color-pack: false,
  $utilities: false,
  $typography: (
    "h1": (
      "size": 2rem,
      "weight": 500,
      "line-height": 2.2rem,
      "letter-spacing": 0,
      "font-family": "Comic Sans MS",
      "text-transform": none,
    ),
  )
);

5. 验证效果

重启Nuxt开发服务,检查根字体大小、H1排版等自定义样式是否已生效。

内容的提问来源于stack exchange,提问作者Augustin Riedinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:25:47