Sass @import to @use Migration
March 22, 2025 · AI Conversations
More info and automated migrator: https://sass-lang.com/d/import
╷
2 │ @import 'vuetify/styles/main.sass';
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/style.scss 2:9 root stylesheet
Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
More info and automated migrator: https://sass-lang.com/d/import
╷
3 │ @import './override';
│ ^^^^^^^^^^^^
╵
../../../../src/scss/style.scss 3:9 root stylesheet
Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
More info and automated migrator: https://sass-lang.com/d/import
╷
4 │ @import './layout/container';
│ ^^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/style.scss 4:9 root stylesheet
Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
More info and automated migrator: https://sass-lang.com/d/import
╷
5 │ @import './layout/sidebar';
│ ^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/style.scss 5:9 root stylesheet
migrate our files
Here's a breakdown of what to do:
—
## 🔧 Step-by-Step Migration
### 1. ✅ **Replace `@import` with `@use`**
Update your `style.scss`:
#### 🔁 Before:
@import 'vuetify/styles/main.sass';
@import './override';
@import './layout/container';
@import './layout/sidebar';
#### ✅ After:
@use 'vuetify/styles/main.sass' as *;
@use './override' as *;
@use './layout/container' as *;
@use './layout/sidebar' as *;
> `as *` makes all members (variables, mixins, etc.) globally available like `@import` did. This should be used **sparingly**, and ideally you import only what you need.
—
### 2. 📂 **Refactor partials (optional but recommended)**
If your files (like `override.scss`, `container.scss`, etc.) were relying on `@import`, update them to use `@forward`.
#### For example, change `layout/_container.scss`:
// Old content — probably just variables/mixins
$container-width: 1200px;
No change needed unless you want to bundle:
#### Create `layout/_index.scss`:
@forward './container';
@forward './sidebar';
Then in `style.scss`, do:
@use './layout' as *;
—
### 3. ⚙️ Update your build system (if needed)
Make sure you’re using **Dart Sass**, not node-sass. Most tools already default to Dart Sass now.
If you're using Vue or Vite, you're likely already covered.
—
### 4. 🧪 Test!
Run your app and check:
– CSS output is correct.
– No variables or mixins are missing.
– No `@import` warnings remain.
—
### 🛠 Optional: Use the **official migrator**
Run the Sass migrator in your terminal:
npx sass-migrator --migrate-deps --verbose module src/scss/style.scss
This will attempt to automatically convert all `@import` usage into `@use`/`@forward`.
—
If you want, I can help rewrite your actual file structure and imports step by step. Just show me your directory structure or key files (`override.scss`, `container.scss`, etc.).
@import './variables';
@import 'vuetify/styles/main.sass';
@import './override';
@import './layout/container';
@import './layout/sidebar';
@import './layout/topbar';
@import './components/VButtons';
@import './components/VCard';
@import './components/VField';
@import './components/VInput';
@import './components/VNavigationDrawer';
@import './components/VShadow';
@import './components/VTextField';
@import './components/VTabs';
@import './pages/dashboards';
@import 'vue3-perfect-scrollbar/style.css';
—
## ✅ Updated `styles.scss` with `@use` (migrated version)
@use './variables' as *;
@use 'vuetify/styles/main.sass' as *;
@use './override' as *;
@use './layout/container' as *;
@use './layout/sidebar' as *;
@use './layout/topbar' as *;
@use './components/VButtons' as *;
@use './components/VCard' as *;
@use './components/VField' as *;
@use './components/VInput' as *;
@use './components/VNavigationDrawer' as *;
@use './components/VShadow' as *;
@use './components/VTextField' as *;
@use './components/VTabs' as *;
@use './pages/dashboards' as *;
// This is a CSS file, not SCSS, so `@import` is still correct here:
@import 'vue3-perfect-scrollbar/style.css';
—
## 🧱 Recommended folder structure (if not already like this)
scss/
├── styles.scss
├── _variables.scss
├── _override.scss
├── layout/
│ ├── _container.scss
│ ├── _sidebar.scss
│ └── _topbar.scss
├── components/
│ ├── _VButtons.scss
│ ├── _VCard.scss
│ ├── ...
├── pages/
│ └── _dashboards.scss
—
## 🆘 Extra Tip: Reduce the use of `as *` for better scoping
Eventually, instead of using `as *`, you can do:
@use './variables' as vars;
@use './layout/sidebar' as sidebar;
.sidebar {
width: vars.$sidebar-width;
}
But for full backward compatibility with the current structure, `as *` is fine for now.
—
Would you like me to generate `index.scss` files in your `layout`, `components`, or `pages` folders to simplify your `styles.scss` even more?
—
### 🧩 1. `layout/index.scss`
@forward './container';
@forward './sidebar';
@forward './topbar';
—
### 🧩 2. `components/index.scss`
@forward './VButtons';
@forward './VCard';
@forward './VField';
@forward './VInput';
@forward './VNavigationDrawer';
@forward './VShadow';
@forward './VTextField';
@forward './VTabs';
—
### 🧩 3. `pages/index.scss`
@forward './dashboards';
—
## ✨ Final `styles.scss` (clean and simple)
@use './variables' as *;
@use 'vuetify/styles/main.sass' as *;
@use './override' as *;
@use './layout' as *;
@use './components' as *;
@use './pages' as *;
@import 'vue3-perfect-scrollbar/style.css';
—
Let me know if you’d like a shell script or command to auto-generate the `index.scss` files if your folder/file list is long!
@use './variables' as *;
@use 'vuetify/styles/main.sass' as *;
@use './override' as *;
@use './layout/container' as *;
@use './layout/sidebar' as *;
@use './layout/topbar' as *;
@use './components/VButtons' as *;
@use './components/VCard' as *;
@use './components/VField' as *;
@use './components/VInput' as *;
@use './components/VNavigationDrawer' as *;
@use './components/VShadow' as *;
@use './components/VTextField' as *;
@use './components/VTabs' as *;
@use './pages/dashboards' as *;
// This is a CSS file, not SCSS, so `@import` is still correct here:
@import 'vue3-perfect-scrollbar/style.css';
Here’s your **cleaned-up and final `styles.scss`**:
—
### ✅ Final `styles.scss` (fully modular and modern)
@use './variables' as *;
@use 'vuetify/styles/main.sass' as *;
@use './override' as *;
@use './layout' as *;
@use './components' as *;
@use './pages' as *;
// This is still a CSS file, so use @import
@import 'vue3-perfect-scrollbar/style.css';
—
### ✅ Recap of your structure:
You should have:
scss/
├── styles.scss
├── _variables.scss
├── _override.scss
├── layout/
│ ├── _container.scss
│ ├── _sidebar.scss
│ ├── _topbar.scss
│ └── index.scss ← forwards all layout partials
├── components/
│ ├── _VButtons.scss
│ ├── _VCard.scss
│ ├── ...
│ └── index.scss ← forwards all component partials
├── pages/
│ ├── _dashboards.scss
│ └── index.scss ← forwards all page partials
—
Everything is now future-proof for Dart Sass 3.0.0 and way easier to maintain. Want a quick script to generate `index.scss` files dynamically if you add more files later?
╷
24 │ border-radius: $border-radius-root;
│ ^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/layout/_container.scss 24:18 @forward
../../../../src/scss/layout/index.scss 1:1 @use
../../../../src/scss/style.scss 5:1 root stylesheet
Plugin: vite:css
File: /home/admin1/myprojects/vue/frontend/src/scss/style.scss:24:18
[sass] Error: Undefined variable.
╷
24 │ border-radius: $border-radius-root;
│ ^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/layout/_container.scss 24:18 @forward
../../../../src/scss/layout/index.scss 1:1 @use
../../../../src/scss/style.scss 5:1 root stylesheet
at handleCompileResponse (/home/admin1/myprojects/vue/frontend/node_modules/sass-embedded/dist/lib/src/compiler/utils.js:155:15)
at AsyncCompiler.compileRequestAsync (/home/admin1/myprojects/vue/frontend/node_modules/sass-embedded/dist/lib/src/compiler/async.js:100:54)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.run (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:49827:22)
at async process (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:49886:24)
at async compileCSSPreprocessors (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48948:28)
at async compileCSS (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48995:32)
at async TransformPluginContext.transform (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48310:11)
at async file:///home/admin1/myprojects/vue/frontend/node_modules/vite-plugin-inspect/dist/index.mjs:1128:17
at async EnvironmentPluginContainer.transform (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:47636:18)
11:37:59 am [vite] (client) Pre-transform error: [sass] Error: Undefined variable.
╷
24 │ border-radius: $border-radius-root;
│ ^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/layout/_container.scss 24:18 @forward
../../../../src/scss/layout/index.scss 1:1 @use
../../../../src/scss/style.scss 5:1 root stylesheet
Plugin: vite:css
File: /home/admin1/myprojects/vue/frontend/src/scss/style.scss:24:18
[sass] Error: Undefined variable.
╷
24 │ border-radius: $border-radius-root;
│ ^^^^^^^^^^^^^^^^^^^
╵
../../../../src/scss/layout/_container.scss 24:18 @forward
../../../../src/scss/layout/index.scss 1:1 @use
../../../../src/scss/style.scss 5:1 root stylesheet
—
## ❗ The issue:
You're using this in `layout/_container.scss`:
border-radius: $border-radius-root;
But Dart Sass with `@use` **does not expose variables globally** unless you explicitly reference them from the module that defines them.
If `$border-radius-root` is defined in `variables.scss`, then you must:
—
## ✅ Solution Options:
### 🧩 Option 1: Reference variable with namespace
Update `layout/_container.scss` to:
@use '../variables' as vars;
.container {
border-radius: vars.$border-radius-root;
}
> You can name the alias anything — `vars`, `v`, `global`, etc.
—
### 🧩 Option 2: Use `@use '../variables' as *;` (if you want to avoid prefixes)
You can still mimic the old global behavior (less recommended for scalability):
@use '../variables' as *;
.container {
border-radius: $border-radius-root;
}
But this makes everything global again and kind of defeats the purpose of `@use` modularity — so it's better to go with **Option 1** for maintainability.
—
## ✅ Final tip: never `@forward` partials that rely on undefined variables
In `layout/index.scss`, you're doing:
@forward './container';
If `container.scss` has a variable dependency, that must be handled **inside** that file using `@use`, not assuming the parent will provide it.
—
Let me know if you want me to scan the rest of your files and suggest all necessary `@use` statements automatically.
html {
overflow-y: auto;
}
.v-main {
margin-right: 20px;
}
@media (max-width: 1279px) {
.v-main {
margin: 0 10px;
}
}
.spacer {
padding: 100px 0;
}
@media (max-width: 800px) {
.spacer {
padding: 40px 0;
}
}
.page-wrapper {
min-height: calc(100vh – 100px);
padding: 15px;
border-radius: $border-radius-root;
background: rgb(var(–v-theme-containerBg));
}
$sizes: (
'display-1': 44px,
'display-2': 40px,
'display-3': 30px,
'h1': 36px,
'h2': 30px,
'h3': 21px,
'h4': 18px,
'h5': 16px,
'h6': 14px,
'text-8': 8px,
'text-10': 10px,
'text-13': 13px,
'text-18': 18px,
'text-20': 20px,
'text-24': 24px,
'body-text-1': 10px
);
@each $pixel, $size in $sizes {
.#{$pixel} {
font-size: $size;
line-height: $size + 10;
}
}
.customizer-btn {
position: fixed;
top: 25%;
right: 10px;
border-radius: 50% 50% 4px;
.icon {
animation: progress-circular-rotate 1.4s linear infinite;
transform-origin: center center;
transition: all 0.2s ease-in-out;
}
}
.text-white {
color: rgb(255, 255, 255) !important;
}
// font family
body {
.Poppins {
font-family: 'Poppins', sans-serif !important;
}
.Inter {
font-family: 'Inter', sans-serif !important;
}
}
@keyframes blink {
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes bounce {
0%,
20%,
53%,
to {
animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
transform: translateZ(0);
}
40%,
43% {
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
transform: translate3d(0, -5px, 0);
}
70% {
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
transform: translate3d(0, -7px, 0);
}
80% {
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
transform: translateZ(0);
}
90% {
transform: translate3d(0, -2px, 0);
}
}
—
## ✅ Fix the error
At the **top of `_container.scss`**, add this line:
@use '../variables' as vars;
Then update the usage of the variable from:
border-radius: $border-radius-root;
to:
border-radius: vars.$border-radius-root;
—
## ✅ Clean version of `_container.scss` (with fix)
@use '../variables' as vars;
html {
overflow-y: auto;
}
.v-main {
margin-right: 20px;
}
@media (max-width: 1279px) {
.v-main {
margin: 0 10px;
}
}
.spacer {
padding: 100px 0;
}
@media (max-width: 800px) {
.spacer {
padding: 40px 0;
}
}
.page-wrapper {
min-height: calc(100vh - 100px);
padding: 15px;
border-radius: vars.$border-radius-root;
background: rgb(var(--v-theme-containerBg));
}
$sizes: (
'display-1': 44px,
'display-2': 40px,
'display-3': 30px,
'h1': 36px,
'h2': 30px,
'h3': 21px,
'h4': 18px,
'h5': 16px,
'h6': 14px,
'text-8': 8px,
'text-10': 10px,
'text-13': 13px,
'text-18': 18px,
'text-20': 20px,
'text-24': 24px,
'body-text-1': 10px
);
@each $pixel, $size in $sizes {
.#{$pixel} {
font-size: $size;
line-height: $size + 10;
}
}
.customizer-btn {
position: fixed;
top: 25%;
right: 10px;
border-radius: 50% 50% 4px;
.icon {
animation: progress-circular-rotate 1.4s linear infinite;
transform-origin: center center;
transition: all 0.2s ease-in-out;
}
}
.text-white {
color: rgb(255, 255, 255) !important;
}
// font family
body {
.Poppins {
font-family: 'Poppins', sans-serif !important;
}
.Inter {
font-family: 'Inter', sans-serif !important;
}
}
@keyframes blink {
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes bounce {
0%,
20%,
53%,
to {
animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
transform: translateZ(0);
}
40%,
43% {
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
transform: translate3d(0, -5px, 0);
}
70% {
animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
transform: translate3d(0, -7px, 0);
}
80% {
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
transform: translateZ(0);
}
90% {
transform: translate3d(0, -2px, 0);
}
}
—
If other files (like `_sidebar.scss`, etc.) also use variables, make sure to import `../variables` in them the same way.
Want me to scan and fix all such files in one go? Just let me know.
/*This is for the logo*/
.leftSidebar {
border: 0px;
box-shadow: none !important;
.logo {
padding-left: 7px;
}
}
/*This is for the Vertical sidebar*/
.scrollnavbar {
height: calc(100vh – 100px);
.smallCap {
padding: 0px 0 0 4px !important;
font-size: 0.875rem;
font-weight: 500;
}
.v-list {
color: rgb(var(–v-theme-lightText));
}
/*General Menu css*/
.v-list-group__items .v-list-item,
.v-list-item {
border-radius: $border-radius-root;
padding-inline-start: calc(12px + var(–indent-padding) / 2) !important;
&:hover {
color: rgb(var(–v-theme-secondary));
}
.v-list-item__prepend {
margin-inline-end: 13px;
}
.v-list-item__append {
font-size: 0.875rem;
.v-icon {
margin-inline-start: 13px;
}
}
.v-list-item-title {
font-size: 0.875rem;
}
}
.v-list-group__items .v-list-item {
margin-inline-start: calc(2px + var(–indent-padding) / 2);
padding-inline-start: 16px !important;
}
.leftPadding {
margin-left: 4px;
}
/*This is for the dropdown*/
.v-list {
.v-list-item–active {
.v-list-item-title {
font-weight: 500;
}
}
.sidebarchip .v-icon {
margin-inline-start: -3px;
}
.v-list-group {
.v-list-item:hover > .v-list-item__overlay,
.v-list-item–active > .v-list-item__overlay {
background-color: transparent;
}
.v-list-item:focus-visible > .v-list-item__overlay {
opacity: 0;
}
}
> .v-list-group {
position: relative;
> .v-list-item–active,
> .v-list-item:hover {
background: rgb(var(–v-theme-secondary), 0.05);
}
&:after {
content: '';
position: absolute;
left: 21px;
top: 46px;
height: calc(100% – 46px);
width: 1px;
opacity: 1;
background: rgb(var(–v-theme-primary), 0.15);
}
}
}
}
.v-navigation-drawer–rail {
.scrollnavbar .v-list .v-list-group__items,
.hide-menu {
opacity: 0;
}
.leftPadding {
margin-left: 0px;
}
}
@media only screen and (min-width: 1170px) {
.mini-sidebar {
.logo {
width: 40px;
overflow: hidden;
}
.leftSidebar:hover {
box-shadow: $box-shadow !important;
}
.v-navigation-drawer–expand-on-hover:hover {
.logo {
width: 100%;
}
.v-list .v-list-group__items,
.hide-menu {
opacity: 1;
}
}
}
}
– `$border-radius-root`
– `$box-shadow`
Which are presumably defined in your `variables.scss`.
—
## ✅ Fix for `_sidebar.scss`
Add this line **at the very top**:
@use '../variables' as vars;
Then replace:
– `$border-radius-root` → `vars.$border-radius-root`
– `$box-shadow` → `vars.$box-shadow`
—
### ✅ Updated `_sidebar.scss` (only the changed lines shown)
@use '../variables' as vars;
/* ...rest of your styles... */
.v-list-group__items .v-list-item,
.v-list-item {
border-radius: vars.$border-radius-root;
/* ... */
}
.mini-sidebar {
.leftSidebar:hover {
box-shadow: vars.$box-shadow !important;
}
}
—
### ✅ Optional: Clean your variables file
Make sure `variables.scss` actually defines:
$border-radius-root: 8px; // or whatever value
$box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); // etc.
—
Let me know if you’d like me to batch process all your SCSS partials for missing variable imports. I can even give you a shell script to detect and patch these automatically.
╷
11 │ color: $white !important;
│ ^^^^^^
╵
../../../../src/scss/components/_VButtons.scss 11:14 @forward
../../../../src/scss/components/index.scss 1:1 @use
../../../../src/scss/style.scss 6:1 root stylesheet
Plugin: vite:css
File: /home/admin1/myprojects/vue/frontend/src/scss/style.scss:11:14
[sass] Error: Undefined variable.
╷
11 │ color: $white !important;
│ ^^^^^^
╵
../../../../src/scss/components/_VButtons.scss 11:14 @forward
../../../../src/scss/components/index.scss 1:1 @use
../../../../src/scss/style.scss 6:1 root stylesheet
at handleCompileResponse (/home/admin1/myprojects/vue/frontend/node_modules/sass-embedded/dist/lib/src/compiler/utils.js:155:15)
at AsyncCompiler.compileRequestAsync (/home/admin1/myprojects/vue/frontend/node_modules/sass-embedded/dist/lib/src/compiler/async.js:100:54)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.run (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:49827:22)
at async process (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:49886:24)
at async compileCSSPreprocessors (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48948:28)
at async compileCSS (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48995:32)
at async TransformPluginContext.transform (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:48310:11)
at async file:///home/admin1/myprojects/vue/frontend/node_modules/vite-plugin-inspect/dist/index.mjs:1128:17
at async EnvironmentPluginContainer.transform (file:///home/admin1/myprojects/vue/frontend/node_modules/vite/dist/node/chunks/dep-glQox-ep.js:47636:18)
11:43:25 am [vite] (client) Pre-transform error: [sass] Error: Undefined variable.
╷
11 │ color: $white !important;
│ ^^^^^^
╵
../../../../src/scss/components/_VButtons.scss 11:14 @forward
../../../../src/scss/components/index.scss 1:1 @use
../../../../src/scss/style.scss 6:1 root stylesheet
Plugin: vite:css
File: /home/admin1/myprojects/vue/frontend/src/scss/style.scss:11:14
[sass] Error: Undefined variable.
╷
11 │ color: $white !important;
│ ^^^^^^
╵
../../../../src/scss/components/_VButtons.scss 11:14 @forward
../../../../src/scss/components/index.scss 1:1 @use
../../../../src/scss/style.scss 6:1 root stylesheet
—
## ✅ Fix for `_VButtons.scss`
Add this line at the top of your `components/_VButtons.scss` file:
@use '../variables' as vars;
Then update:
color: $white !important;
to:
color: vars.$white !important;
—
### 🔍 Summary of the Rule
Whenever a variable (like `$white`, `$primary`, `$font-size`, etc.) is defined in your `variables.scss`, and you're trying to use it in **any other file**, you must:
1. `@use '../variables' as vars;`
2. Prefix the variable with `vars.`, e.g., `vars.$white`.
—
Would you like a script or command to:
– Automatically find all files using undefined variables?
– Add `@use '../variables' as vars;` where it's missing?
– Replace all `$variable` with `vars.$variable`?
Let me know — I can help automate it.
Unfortunately, **Dart Sass deliberately removed global variable sharing via `@import`**, and with `@use`, **every file must explicitly load what it needs**.
BUT — here are the **best workarounds** depending on what you want:
—
## ✅ **Option 1 (Best Practice): Use a single entrypoint variables file**
### Step 1: Create `scss/_globals.scss`
@use './variables' as *;
@use './mixins' as *;
@use './functions' as *;
// Add others if needed
> This file re-exports variables, mixins, functions, etc. using `as *`, so they become globally available in a controlled way.
### Step 2: At the top of every partial (like `_VButtons.scss`), use:
@use '../globals' as *;
> ✅ Only one line per file, and you don’t need to do `vars.$white` — you can still use `$white` directly.
—
## ✅ **Option 2 (Less Strict): Use `@use` with `as *` in each file**
If you're okay being less modular, in each file just:
@use '../variables' as *;
This makes all variables globally accessible, but you lose scoping.
—
## ❌ What you *cannot* do:
– You **cannot** load variables once in `style.scss` and expect them to be available in all partials (`_*.scss`). Dart Sass doesn't work that way anymore.
– You **cannot** rely on `@import` as a fallback — it’s deprecated and will be **removed** in Sass 3.0.0.
—
## 🧠 Pro Tip: Automate the fix
Here’s a quick `sed` command you can run in Linux/macOS to inject `@use '../globals' as *;` at the top of every `_*.scss` file (except `variables.scss`, etc.):
find src/scss -name '_*.scss' ! -name '_variables.scss' ! -name '_globals.scss' -exec sed -i '1i@use "../globals" as *;' {} +
> You may need to tweak the path (`../globals`) depending on the file's depth.
—
Would you like me to generate a ready-to-drop-in `_globals.scss` based on your existing setup (`variables`, `mixins`, etc.)?
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"paths": {
"@/*": ["./src/*"]
}
}
}
Option 'tsBuildInfoFile' cannot be specified without specifying option 'incremental' or 'composite' or if not running 'tsc -b'.ts
Specify the folder for .tsbuildinfo incremental compilation files.
—
## ✅ Solution
You simply need to add `"incremental": true` to your `compilerOptions`.
Here’s the fixed version of your `tsconfig.json`:
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"paths": {
"@/*": ["./src/*"]
}
}
}
—
## 💡 Explanation
– `incremental: true` tells TypeScript to store info from the last compilation to speed up subsequent builds.
– `tsBuildInfoFile` tells it where to save that cache.
– Without `incremental`, `tsBuildInfoFile` is meaningless, hence the error.
—
Let me know if you're using `tsc -b` with multiple configs — in that case, you might need `"composite": true` instead.