-
-
Notifications
You must be signed in to change notification settings - Fork 7.5k
Description
Describe the bug
Hi, we just tried updating to vite 7.0.0 today and ran into the following issue:
We're using resolve aliases for imports / "@use" statements inside scss (the style tag of vue components to be specific, but I also tested it using pure.scss files where the issue is reproducable as well).
As config we're matching imports starting with @/ using a regex and replace them with the path of our src folder:
resolve: {
alias: [
{
find: /@\/(.*)/,
replacement: fileURLToPath(new URL('./src/', import.meta.url)) + '$1',
},
],
},Up until v7 this worked, but now it looks like the behavior for replacing the path changed. Looking at the warning logged by sass it looks like the path is not fully replaced but appended to the path of the current file:
This is especially problematic as the new behavior seems to differ from the way aliases are resolved for regular TS imports as those continue to work as expected in v7 but break if I try to update the replacement so scss would work.
Reproduction
Steps to reproduce
- Check out the repo
- Install dependencies using pnpm
- Try to build the app by running
pnpm build - You should see the error that the import
@use "@/test.scss"could not be resolved - (optional) Downgrade vite to the latest version of v6 and run the build, it now works as expected
System Info
System:
OS: macOS 15.5
CPU: (14) arm64 Apple M4 Max
Memory: 697.67 MB / 36.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.16.0 - ~/.local/state/fnm_multishells/71999_1750844782509/bin/node
Yarn: 1.22.22 - ~/.local/state/fnm_multishells/71999_1750844782509/bin/yarn
npm: 10.9.2 - ~/.local/state/fnm_multishells/71999_1750844782509/bin/npm
pnpm: 10.12.2 - ~/.local/state/fnm_multishells/71999_1750844782509/bin/pnpm
Browsers:
Brave Browser: 137.1.79.126
Chrome: 137.0.7151.120
Edge: 137.0.3296.93
Safari: 18.5
npmPackages:
@vitejs/plugin-vue: ^6.0.0 => 6.0.0
vite: ^7.0.0 => 7.0.0Used Package Manager
pnpm
Logs
Click to expand!
vite:config config file loaded in 251.19ms +0ms
/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/$1
vite:env loading env files: [
vite:env '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/.env',
vite:env '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/.env.local',
vite:env '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/.env.production',
vite:env '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/.env.production.local'
vite:env ] +0ms
vite:env env files loaded in 0.23ms +1ms
vite:env using resolved env: {} +0ms
vite:config using resolved config: {
vite:config plugins: [
vite:config 'vite:build-metadata',
vite:config 'vite:watch-package-data',
vite:config 'alias',
vite:config 'vite:modulepreload-polyfill',
vite:config 'vite:resolve',
vite:config 'vite:html-inline-proxy',
vite:config 'vite:css',
vite:config 'vite:esbuild',
vite:config 'vite:json',
vite:config 'vite:wasm-helper',
vite:config 'vite:worker',
vite:config 'vite:asset',
vite:config 'vite:vue',
vite:config 'vite:wasm-fallback',
vite:config 'vite:define',
vite:config 'vite:css-post',
vite:config 'vite:build-html',
vite:config 'vite:worker-import-meta-url',
vite:config 'vite:asset-import-meta-url',
vite:config 'vite:force-systemjs-wrap-complete',
vite:config 'commonjs',
vite:config 'vite:data-uri',
vite:config 'vite:rollup-options-plugins',
vite:config 'vite:dynamic-import-vars',
vite:config 'vite:import-glob',
vite:config 'vite:build-import-analysis',
vite:config 'vite:esbuild-transpile',
vite:config 'vite:terser',
vite:config 'vite:manifest',
vite:config 'vite:ssr-manifest',
vite:config 'vite:reporter',
vite:config 'vite:load-fallback'
vite:config ],
vite:config resolve: {
vite:config externalConditions: [ 'node' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config dedupe: [ 'vue' ],
vite:config noExternal: [],
vite:config external: [],
vite:config preserveSymlinks: false,
vite:config alias: [
vite:config {
vite:config find: /@\/(.*)/,
vite:config replacement: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/$1'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ],
vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
vite:config conditions: [ 'module', 'browser', 'development|production' ],
vite:config builtins: []
vite:config },
vite:config build: {
vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config polyfillModulePreload: true,
vite:config modulePreload: { polyfill: true },
vite:config outDir: 'dist',
vite:config assetsDir: 'assets',
vite:config assetsInlineLimit: 4096,
vite:config sourcemap: false,
vite:config terserOptions: {},
vite:config rollupOptions: {},
vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
vite:config write: true,
vite:config emptyOutDir: null,
vite:config copyPublicDir: true,
vite:config manifest: false,
vite:config lib: false,
vite:config ssrManifest: false,
vite:config ssrEmitAssets: false,
vite:config reportCompressedSize: true,
vite:config chunkSizeWarningLimit: 500,
vite:config watch: null,
vite:config cssCodeSplit: true,
vite:config minify: 'esbuild',
vite:config ssr: false,
vite:config emitAssets: true,
vite:config createEnvironment: [Function: createEnvironment],
vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config cssMinify: true
vite:config },
vite:config define: {
vite:config __VUE_OPTIONS_API__: true,
vite:config __VUE_PROD_DEVTOOLS__: false,
vite:config __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false
vite:config },
vite:config ssr: {
vite:config target: 'node',
vite:config optimizeDeps: {
vite:config esbuildOptions: { preserveSymlinks: false },
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config extensions: [],
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config noDiscovery: true
vite:config },
vite:config external: [],
vite:config noExternal: [],
vite:config resolve: {
vite:config conditions: [ 'module', 'node', 'development|production' ],
vite:config externalConditions: [ 'node' ]
vite:config }
vite:config },
vite:config environments: {
vite:config client: {
vite:config define: {
vite:config __VUE_OPTIONS_API__: true,
vite:config __VUE_PROD_DEVTOOLS__: false,
vite:config __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false
vite:config },
vite:config resolve: {
vite:config externalConditions: [ 'node' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config dedupe: [ 'vue' ],
vite:config noExternal: [],
vite:config external: [],
vite:config preserveSymlinks: false,
vite:config alias: [
vite:config {
vite:config find: /@\/(.*)/,
vite:config replacement: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/$1'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ],
vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
vite:config conditions: [ 'module', 'browser', 'development|production' ],
vite:config builtins: []
vite:config },
vite:config keepProcessEnv: false,
vite:config consumer: 'client',
vite:config optimizeDeps: {
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config extensions: [],
vite:config disabled: undefined,
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config noDiscovery: false,
vite:config esbuildOptions: { preserveSymlinks: false }
vite:config },
vite:config dev: {
vite:config warmup: [],
vite:config sourcemap: { js: true },
vite:config sourcemapIgnoreList: [Function: isInNodeModules],
vite:config preTransformRequests: true,
vite:config createEnvironment: [Function: defaultCreateClientDevEnvironment],
vite:config recoverable: true,
vite:config moduleRunnerTransform: false
vite:config },
vite:config build: {
vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config polyfillModulePreload: true,
vite:config modulePreload: { polyfill: true },
vite:config outDir: 'dist',
vite:config assetsDir: 'assets',
vite:config assetsInlineLimit: 4096,
vite:config sourcemap: false,
vite:config terserOptions: {},
vite:config rollupOptions: {},
vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
vite:config write: true,
vite:config emptyOutDir: null,
vite:config copyPublicDir: true,
vite:config manifest: false,
vite:config lib: false,
vite:config ssrManifest: false,
vite:config ssrEmitAssets: false,
vite:config reportCompressedSize: true,
vite:config chunkSizeWarningLimit: 500,
vite:config watch: null,
vite:config cssCodeSplit: true,
vite:config minify: 'esbuild',
vite:config ssr: false,
vite:config emitAssets: true,
vite:config createEnvironment: [Function: createEnvironment],
vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config cssMinify: true
vite:config },
vite:config plugins: [
vite:config {
vite:config name: 'vite:build-metadata',
vite:config renderChunk: [AsyncFunction: renderChunk]
vite:config },
vite:config {
vite:config name: 'vite:watch-package-data',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config watchChange: [Function: watchChange]
vite:config },
vite:config {
vite:config name: 'alias',
vite:config buildStart: [AsyncFunction: buildStart],
vite:config resolveId: [Function: resolveId]
vite:config },
vite:config {
vite:config name: 'vite:modulepreload-polyfill',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:resolve',
vite:config resolveId: [AsyncFunction: resolveId],
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:html-inline-proxy',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:css',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config load: { handler: [AsyncFunction: handler] },
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:esbuild',
vite:config configureServer: [Function: configureServer],
vite:config transform: [AsyncFunction: transform]
vite:config },
vite:config {
vite:config name: 'vite:json',
vite:config transform: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:wasm-helper',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:worker',
vite:config buildStart: [Function: buildStart],
vite:config load: { handler: [AsyncFunction: handler] },
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:asset',
vite:config perEnvironmentStartEndDuringDev: true,
vite:config buildStart: [Function: buildStart],
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:vue',
vite:config api: {
vite:config options: [Getter/Setter],
vite:config include: [Getter/Setter],
vite:config exclude: [Getter/Setter],
vite:config version: '6.0.0'
vite:config },
vite:config handleHotUpdate: [Function: handleHotUpdate],
vite:config config: [Function: config],
vite:config configResolved: [Function: configResolved],
vite:config options: [Function: options],
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config configureServer: [Function: configureServer],
vite:config buildStart: [Function: buildStart],
vite:config resolveId: {
vite:config filter: { id: [ /^plugin\-vue:export\-helper$/, /[?&]vue\b/ ] },
vite:config handler: [Function: handler]
vite:config },
vite:config load: {
vite:config filter: { id: [ /^plugin\-vue:export\-helper$/, /[?&]vue\b/ ] },
vite:config handler: [Function: handler]
vite:config },
vite:config transform: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:wasm-fallback',
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:define',
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:css-post',
vite:config renderStart: [Function: renderStart],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [AsyncFunction: renderChunk],
vite:config augmentChunkHash: [Function: augmentChunkHash],
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:build-html',
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:worker-import-meta-url',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:asset-import-meta-url',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:force-systemjs-wrap-complete',
vite:config renderChunk: [Function: renderChunk]
vite:config },
vite:config {
vite:config name: 'commonjs',
vite:config version: '28.0.6',
vite:config options: [Function: options],
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config load: [AsyncFunction: load],
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config transform: [Function: transform]
vite:config },
vite:config {
vite:config name: 'vite:data-uri',
vite:config buildStart: [Function: buildStart],
vite:config resolveId: [Function: resolveId],
vite:config load: [Function: load]
vite:config },
vite:config {
vite:config name: 'vite:dynamic-import-vars',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] },
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:import-glob',
vite:config buildStart: [Function: buildStart],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config hotUpdate: [Function: hotUpdate]
vite:config },
vite:config {
vite:config name: 'vite:build-import-analysis',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] },
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:esbuild-transpile',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config renderChunk: [AsyncFunction: renderChunk]
vite:config },
vite:config {
vite:config name: 'vite:terser',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config renderChunk: [AsyncFunction: renderChunk],
vite:config closeBundle: [Function: closeBundle]
vite:config },
vite:config {
vite:config name: 'vite:reporter',
vite:config sharedDuringBuild: true,
vite:config perEnvironmentStartEndDuringDev: true,
vite:config transform: [Function: transform],
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config renderStart: [Function: renderStart],
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle],
vite:config writeBundle: [AsyncFunction: writeBundle]
vite:config },
vite:config {
vite:config name: 'vite:load-fallback',
vite:config load: { handler: [AsyncFunction: handler] }
vite:config }
vite:config ]
vite:config },
vite:config ssr: {
vite:config define: {
vite:config __VUE_OPTIONS_API__: true,
vite:config __VUE_PROD_DEVTOOLS__: false,
vite:config __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false
vite:config },
vite:config resolve: {
vite:config externalConditions: [ 'node' ],
vite:config extensions: [
vite:config '.mjs', '.js',
vite:config '.mts', '.ts',
vite:config '.jsx', '.tsx',
vite:config '.json'
vite:config ],
vite:config dedupe: [ 'vue' ],
vite:config noExternal: [],
vite:config external: [],
vite:config preserveSymlinks: false,
vite:config alias: [
vite:config {
vite:config find: /@\/(.*)/,
vite:config replacement: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/$1'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/env/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/env.mjs'
vite:config },
vite:config {
vite:config find: /^\/?@vite\/client/,
vite:config replacement: '/@fs/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/client/client.mjs'
vite:config }
vite:config ],
vite:config mainFields: [ 'module', 'jsnext:main', 'jsnext' ],
vite:config conditions: [ 'module', 'node', 'development|production' ],
vite:config builtins: [
vite:config '_http_agent', '_http_client', '_http_common',
vite:config '_http_incoming', '_http_outgoing', '_http_server',
vite:config '_stream_duplex', '_stream_passthrough', '_stream_readable',
vite:config '_stream_transform', '_stream_wrap', '_stream_writable',
vite:config '_tls_common', '_tls_wrap', 'assert',
vite:config 'assert/strict', 'async_hooks', 'buffer',
vite:config 'child_process', 'cluster', 'console',
vite:config 'constants', 'crypto', 'dgram',
vite:config 'diagnostics_channel', 'dns', 'dns/promises',
vite:config 'domain', 'events', 'fs',
vite:config 'fs/promises', 'http', 'http2',
vite:config 'https', 'inspector', 'inspector/promises',
vite:config 'module', 'net', 'os',
vite:config 'path', 'path/posix', 'path/win32',
vite:config 'perf_hooks', 'process', 'punycode',
vite:config 'querystring', 'readline', 'readline/promises',
vite:config 'repl', 'stream', 'stream/consumers',
vite:config 'stream/promises', 'stream/web', 'string_decoder',
vite:config 'sys', 'timers', 'timers/promises',
vite:config 'tls', 'trace_events', 'tty',
vite:config 'url', 'util', 'util/types',
vite:config 'v8', 'vm', 'wasi',
vite:config 'worker_threads', 'zlib', /^node:/,
vite:config /^npm:/, /^bun:/
vite:config ]
vite:config },
vite:config keepProcessEnv: true,
vite:config consumer: 'server',
vite:config optimizeDeps: {
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config extensions: [],
vite:config disabled: undefined,
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config noDiscovery: true,
vite:config esbuildOptions: { preserveSymlinks: false }
vite:config },
vite:config dev: {
vite:config warmup: [],
vite:config sourcemap: { js: true },
vite:config sourcemapIgnoreList: [Function: isInNodeModules],
vite:config preTransformRequests: false,
vite:config createEnvironment: [Function: defaultCreateDevEnvironment],
vite:config recoverable: false,
vite:config moduleRunnerTransform: true
vite:config },
vite:config build: {
vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config polyfillModulePreload: true,
vite:config modulePreload: { polyfill: true },
vite:config outDir: 'dist',
vite:config assetsDir: 'assets',
vite:config assetsInlineLimit: 4096,
vite:config sourcemap: false,
vite:config terserOptions: {},
vite:config rollupOptions: {},
vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
vite:config write: true,
vite:config emptyOutDir: null,
vite:config copyPublicDir: true,
vite:config manifest: false,
vite:config lib: false,
vite:config ssrManifest: false,
vite:config ssrEmitAssets: false,
vite:config reportCompressedSize: true,
vite:config chunkSizeWarningLimit: 500,
vite:config watch: null,
vite:config cssCodeSplit: true,
vite:config minify: false,
vite:config ssr: true,
vite:config emitAssets: true,
vite:config createEnvironment: [Function: createEnvironment],
vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ],
vite:config cssMinify: 'esbuild'
vite:config },
vite:config plugins: [
vite:config {
vite:config name: 'vite:build-metadata',
vite:config renderChunk: [AsyncFunction: renderChunk]
vite:config },
vite:config {
vite:config name: 'vite:watch-package-data',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config watchChange: [Function: watchChange]
vite:config },
vite:config {
vite:config name: 'alias',
vite:config buildStart: [AsyncFunction: buildStart],
vite:config resolveId: [Function: resolveId]
vite:config },
vite:config {
vite:config name: 'vite:modulepreload-polyfill',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:resolve',
vite:config resolveId: [AsyncFunction: resolveId],
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:html-inline-proxy',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:css',
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config load: { handler: [AsyncFunction: handler] },
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:esbuild',
vite:config configureServer: [Function: configureServer],
vite:config transform: [AsyncFunction: transform]
vite:config },
vite:config {
vite:config name: 'vite:json',
vite:config transform: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:wasm-helper',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:worker',
vite:config buildStart: [Function: buildStart],
vite:config load: { handler: [AsyncFunction: handler] },
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:asset',
vite:config perEnvironmentStartEndDuringDev: true,
vite:config buildStart: [Function: buildStart],
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:vue',
vite:config api: {
vite:config options: [Getter/Setter],
vite:config include: [Getter/Setter],
vite:config exclude: [Getter/Setter],
vite:config version: '6.0.0'
vite:config },
vite:config handleHotUpdate: [Function: handleHotUpdate],
vite:config config: [Function: config],
vite:config configResolved: [Function: configResolved],
vite:config options: [Function: options],
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config configureServer: [Function: configureServer],
vite:config buildStart: [Function: buildStart],
vite:config resolveId: {
vite:config filter: { id: [ /^plugin\-vue:export\-helper$/, /[?&]vue\b/ ] },
vite:config handler: [Function: handler]
vite:config },
vite:config load: {
vite:config filter: { id: [ /^plugin\-vue:export\-helper$/, /[?&]vue\b/ ] },
vite:config handler: [Function: handler]
vite:config },
vite:config transform: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:wasm-fallback',
vite:config load: { handler: [Function: handler] }
vite:config },
vite:config {
vite:config name: 'vite:define',
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:css-post',
vite:config renderStart: [Function: renderStart],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [AsyncFunction: renderChunk],
vite:config augmentChunkHash: [Function: augmentChunkHash],
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:build-html',
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config generateBundle: [AsyncFunction: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:force-systemjs-wrap-complete',
vite:config renderChunk: [Function: renderChunk]
vite:config },
vite:config {
vite:config name: 'commonjs',
vite:config version: '28.0.6',
vite:config options: [Function: options],
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config load: [AsyncFunction: load],
vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule],
vite:config transform: [Function: transform]
vite:config },
vite:config {
vite:config name: 'vite:data-uri',
vite:config buildStart: [Function: buildStart],
vite:config resolveId: [Function: resolveId],
vite:config load: [Function: load]
vite:config },
vite:config {
vite:config name: 'vite:dynamic-import-vars',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] },
vite:config transform: { handler: [AsyncFunction: handler] }
vite:config },
vite:config {
vite:config name: 'vite:import-glob',
vite:config buildStart: [Function: buildStart],
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config hotUpdate: [Function: hotUpdate]
vite:config },
vite:config {
vite:config name: 'vite:build-import-analysis',
vite:config resolveId: { handler: [Function: handler] },
vite:config load: { handler: [Function: handler] },
vite:config transform: { handler: [AsyncFunction: handler] },
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle]
vite:config },
vite:config {
vite:config name: 'vite:esbuild-transpile',
vite:config applyToEnvironment: [Function: applyToEnvironment],
vite:config renderChunk: [AsyncFunction: renderChunk]
vite:config },
vite:config {
vite:config name: 'vite:reporter',
vite:config sharedDuringBuild: true,
vite:config perEnvironmentStartEndDuringDev: true,
vite:config transform: [Function: transform],
vite:config buildStart: [Function: buildStart],
vite:config buildEnd: [Function: buildEnd],
vite:config renderStart: [Function: renderStart],
vite:config renderChunk: [Function: renderChunk],
vite:config generateBundle: [Function: generateBundle],
vite:config writeBundle: [AsyncFunction: writeBundle]
vite:config },
vite:config {
vite:config name: 'vite:load-fallback',
vite:config load: { handler: [AsyncFunction: handler] }
vite:config }
vite:config ]
vite:config }
vite:config },
vite:config configFile: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/vite.config.ts',
vite:config configFileDependencies: [
vite:config '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/vite.config.ts'
vite:config ],
vite:config inlineConfig: {
vite:config root: undefined,
vite:config base: undefined,
vite:config mode: undefined,
vite:config configFile: undefined,
vite:config configLoader: undefined,
vite:config logLevel: undefined,
vite:config clearScreen: undefined,
vite:config build: {}
vite:config },
vite:config root: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro',
vite:config base: '/',
vite:config decodedBase: '/',
vite:config rawBase: '/',
vite:config publicDir: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/public',
vite:config cacheDir: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.vite',
vite:config command: 'build',
vite:config mode: 'production',
vite:config isWorker: false,
vite:config mainConfig: null,
vite:config bundleChain: [],
vite:config isProduction: true,
vite:config css: {
vite:config transformer: 'postcss',
vite:config preprocessorMaxWorkers: true,
vite:config devSourcemap: false
vite:config },
vite:config json: { namedExports: true, stringify: 'auto' },
vite:config esbuild: { jsxDev: false },
vite:config server: {
vite:config port: 5173,
vite:config strictPort: false,
vite:config host: undefined,
vite:config allowedHosts: [],
vite:config https: undefined,
vite:config open: false,
vite:config proxy: undefined,
vite:config cors: {
vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
vite:config },
vite:config headers: {},
vite:config warmup: { clientFiles: [], ssrFiles: [] },
vite:config middlewareMode: false,
vite:config fs: {
vite:config strict: true,
vite:config deny: [ '.env', '.env.*', '*.{crt,pem}', '**/.git/**' ],
vite:config allow: [
vite:config '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro'
vite:config ]
vite:config },
vite:config preTransformRequests: true,
vite:config perEnvironmentStartEndDuringDev: false,
vite:config sourcemapIgnoreList: [Function: isInNodeModules]
vite:config },
vite:config builder: undefined,
vite:config preview: {
vite:config port: 4173,
vite:config strictPort: false,
vite:config host: undefined,
vite:config allowedHosts: [],
vite:config https: undefined,
vite:config open: false,
vite:config proxy: undefined,
vite:config cors: {
vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
vite:config },
vite:config headers: {}
vite:config },
vite:config envDir: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro',
vite:config env: { BASE_URL: '/', MODE: 'production', DEV: false, PROD: true },
vite:config assetsInclude: [Function: assetsInclude],
vite:config logger: {
vite:config hasWarned: false,
vite:config info: [Function: info],
vite:config warn: [Function (anonymous)],
vite:config warnOnce: [Function: warnOnce],
vite:config error: [Function: error],
vite:config clearScreen: [Function: clearScreen],
vite:config hasErrorLogged: [Function: hasErrorLogged]
vite:config },
vite:config packageCache: Map(1) {
vite:config 'fnpd_/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro' => {
vite:config dir: '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro',
vite:config data: {
vite:config name: 'vite-7-scss-alias-bug-repro',
vite:config version: '0.0.0',
vite:config private: true,
vite:config type: 'module',
vite:config scripts: {
vite:config dev: 'vite',
vite:config build: 'run-p type-check "build-only {@}" --',
vite:config preview: 'vite preview',
vite:config 'build-only': 'vite build',
vite:config 'type-check': 'vue-tsc --build'
vite:config },
vite:config dependencies: { vue: '^3.5.17' },
vite:config devDependencies: {
vite:config '@tsconfig/node22': '^22.0.2',
vite:config '@types/node': '^22.15.32',
vite:config '@vitejs/plugin-vue': '^6.0.0',
vite:config '@vue/tsconfig': '^0.7.0',
vite:config 'npm-run-all2': '^8.0.4',
vite:config 'sass-embedded': '^1.89.2',
vite:config typescript: '~5.8.0',
vite:config vite: '^7.0.0',
vite:config 'vite-plugin-vue-devtools': '^7.7.7',
vite:config 'vue-tsc': '^2.2.10'
vite:config }
vite:config },
vite:config hasSideEffects: [Function: hasSideEffects],
vite:config setResolvedCache: [Function: setResolvedCache],
vite:config getResolvedCache: [Function: getResolvedCache]
vite:config },
vite:config set: [Function (anonymous)]
vite:config },
vite:config worker: { format: 'iife', plugins: '() => plugins', rollupOptions: {} },
vite:config appType: 'spa',
vite:config experimental: {
vite:config importGlobRestoreExtension: false,
vite:config renderBuiltUrl: undefined,
vite:config hmrPartialAccept: false
vite:config },
vite:config future: undefined,
vite:config optimizeDeps: {
vite:config include: [],
vite:config exclude: [],
vite:config needsInterop: [],
vite:config extensions: [],
vite:config disabled: undefined,
vite:config holdUntilCrawlEnd: true,
vite:config force: false,
vite:config noDiscovery: false,
vite:config esbuildOptions: { preserveSymlinks: false }
vite:config },
vite:config dev: {
vite:config warmup: [],
vite:config sourcemap: { js: true },
vite:config sourcemapIgnoreList: [Function: isInNodeModules],
vite:config preTransformRequests: false,
vite:config createEnvironment: [Function: defaultCreateDevEnvironment],
vite:config recoverable: false,
vite:config moduleRunnerTransform: false
vite:config },
vite:config webSocketToken: 'xB56DQ_xw1DL',
vite:config getSortedPlugins: [Function: getSortedPlugins],
vite:config getSortedPluginHooks: [Function: getSortedPluginHooks],
vite:config createResolver: [Function: createResolver],
vite:config fsDenyGlob: [Function: arrayMatcher],
vite:config safeModulePaths: Set(0) {},
vite:config [Symbol(vite:resolved-config)]: true
vite:config } +15ms
vite v7.0.0 building for production...
transforming (1) src/main.ts vite:resolve 0.13ms ./base.css -> /Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/assets/base.css +0ms
transforming (9) node_modules/.pnpm/@vue+runtime-dom@3.5.17/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js vite:resolve 0.06ms /Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src//Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/test.scss -> null +26ms
vite:resolve 0.21ms /Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/@/test.scss -> /Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src//Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/test.scss +0ms
✓ 15 modules transformed.
✗ Build failed in 243ms
error during build:
[vite:css] [sass] Error: Error: ENOENT: no such file or directory, open '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/test.scss'
╷
2 │ @use '@/test.scss';
│ ^^^^^^^^^^^^^^^^^^
╵
../../../../../../../src/App.vue 2:1 root stylesheet
file: /Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/App.vue?vue&type=style&index=0&scoped=9df6a930&lang.scss
[sass] Error: Error: ENOENT: no such file or directory, open '/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/src/test.scss'
╷
2 │ @use '@/test.scss';
│ ^^^^^^^^^^^^^^^^^^
╵
../../../../../../../src/App.vue 2:1 root stylesheet
at handleCompileResponse (/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/sass-embedded@1.89.2/node_modules/sass-embedded/dist/lib/src/compiler/utils.js:155:15)
at AsyncCompiler.compileRequestAsync (/Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/sass-embedded@1.89.2/node_modules/sass-embedded/dist/lib/src/compiler/async.js:100:54)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Object.run (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:32810:19)
at async process (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:32839:20)
at async compileCSSPreprocessors (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:32259:27)
at async compileCSS (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:32287:30)
at async Object.handler (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/vite@7.0.0_@types+node@22.15.33_sass-embedded@1.89.2/node_modules/vite/dist/node/chunks/dep-Bsx9IwL8.js:31832:53)
at async transform (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/rollup@4.44.0/node_modules/rollup/dist/es/shared/node-entry.js:21001:16)
at async ModuleLoader.addModuleSource (file:///Users/brockhoff/Documents/git/test/vite-7-scss-alias-bug-repro/node_modules/.pnpm/rollup@4.44.0/node_modules/rollup/dist/es/shared/node-entry.js:21214:36)
ELIFECYCLE Command failed with exit code 1.
ELIFECYCLE Command failed.
ERROR: "build-only --debug" exited with 1.
ELIFECYCLE Command failed with exit code 1.Validations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.
