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

SvelteKit中SCSS模块无法预加载全局变量的问题求助

SvelteKit全局SCSS预加载失败问题排查与修复

问题描述

我是Svelte新手,在SvelteKit项目中尝试配置全局SCSS(包含变量、混入)自动预加载到所有.module.scss文件,但本地运行时始终提示变量未定义错误。

项目文件结构

├── package-lock.json
├── package.json
├── playwright.config.ts
├── src
│   ├── app.d.ts
│   ├── app.html
│   ├── components
│   │   ├── Header
│   │   │   ├── Header.component.svelte
│   │   │   └── Header.module.scss
│   │   └── footer
│   ├── routes
│   │   ├── +layout.svelte
│   │   ├── home
│   │   │   ├── +error.svelte
│   │   │   └── +page.svelte
│   │   └── layout.module.scss
│   └── scss
│       ├── main.scss
│       ├── mixins.scss
│       └── variables.scss
├── static
│   └── favicon.png
├── svelte.config.js
├── tests
│   └── test.ts
├── tsconfig.json
└── vite.config.ts

当前配置文件

svelte.config.js

import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/kit/vite';
/** @type {import('@sveltejs/kit').Config} */
const config = {
    preprocess: [
        vitePreprocess({
            scss: {
                prependData: '@use"./src/scss/main.scss" as *;'
            }
        }),
    ],

    kit: {
        adapter: adapter()
    }
};

export default config;

vite.config.ts

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
    plugins: [sveltekit()],
    test: {
        include: ['src/**/*.{test,spec}.{js,ts}'],
    },
    css: {
        preprocessorOptions: {
            scss: {
                prependData: `@use './src/scss/main.scss'as *;`,
            },
        },
    },
});

SCSS文件内容

main.scss

@use "mixins";
@use "variables.scss";

variables.scss

$color-black: #0A0A0A;

    $color-white: #f5f5f5;

    $font-primary:'Poppins',

    sans-serif;

错误信息

Internal server error: [sass] Undefined variable.
  ╷
4 │     background-color: $color-black;
  │                       ^^^^^^^^^^^^
  ╵
  src/components/Header/Header.module.scss 4:23  root stylesheet

package.json依赖片段

"version": "0.0.1",
    "private": true,
    "scripts": {
        "dev": "vite dev",
        "build": "vite build",
        "preview": "vite preview",
        "test": "playwright test",
        "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
        "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
        "lint": "prettier --plugin-search-dir . --check . && eslint .",
        "format": "prettier --plugin-search-dir . --write ."
    },
    "devDependencies": {
        "@playwright/test": "^1.28.1",
        "@sveltejs/adapter-auto": "^2.0.0",
        "@sveltejs/adapter-node": "^1.2.4",
        "@sveltejs/kit": "^1.15.9",
        "@sveltejs/vite-plugin-svelte": "^2.1.1",
        "@typescript-eslint/eslint-plugin": "^5.45.0",
        "@typescript-eslint/parser": "^5.45.0",
        "eslint": "^8.28.0",
        "eslint-config-prettier": "^8.5.0",
        "eslint-plugin-svelte": "^2.26.0",
        "prettier": "^2.8.0",
        "prettier-plugin-svelte": "^2.8.1",
        "sass": "^1.62.1",
        "svelte": "^3.54.0",
        "svelte-check": "^3.0.1",
        "tslib": "^2.4.1",
        "typescript": "^5.0.0",
        "vite": "^4.3.0"
    },
    "type": "module"

修复方案

1. 修正SCSS导入语法

Sass的@use指令默认会创建命名空间,若要让变量/混入全局可用,必须添加as *;同时导入文件时可省略.scss后缀:

// src/scss/main.scss
@use "mixins" as *;
@use "variables" as *;

2. 修复variables.scss语法错误

$font-primary的定义存在语法错误,修正为:

// src/scss/variables.scss
$color-black: #0A0A0A;
$color-white: #f5f5f5;
$font-primary: 'Poppins', sans-serif;

3. 统一预加载配置格式

确保svelte.config.js和vite.config.ts中的prependData语法一致(规范空格),避免解析问题:

  • svelte.config.js中修改为:
    prependData: '@use "./src/scss/main.scss" as *;'
    
  • vite.config.ts中修改为:
    prependData: '@use "./src/scss/main.scss" as *;'
    

4. 重启开发服务

修改配置文件后,需要重启vite dev服务,确保新配置生效。

内容的提问来源于stack exchange,提问作者Micheal Morono

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:27:01