首页/文章/前端

遇到升级新版sass(1.80以上)的相关配置问题

2024-12-26
6163 分钟
...

最新版sass

作者自己写这篇文章时的最新版本1.80.6

sass在1.80版本以上有不少使用发生了变化。以下几点是我新装最新版本sass遇到的问题:

在之前版本都是使用@import来对样式文件进行引用的,升级到最新版后你会发现报错了:

@import'./variables.scss'

解决办法就是使用@use 或者@forward 来进行引用:

@forward './variables.scss'

如果控制台警告:

Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

解决方法:
在css的preprocessorOptions选项中配置:api: ‘modern-compiler’, 配置完后还是会有这个警告的话那就再加上配置:silenceDeprecations: [‘legacy-js-api’]

scss: {
          api: 'modern-compiler',
          silenceDeprecations: ['legacy-js-api']
        }
      }

最后就是additionalData引用variables.scss或者index.scss:

additionalData: @use "@/assets/style/index.scss" as *;

这里要使用@use 而不是@improt 再后面还要加上 as *。这是因为使用@use 导入的变量不是直接暴露在当前作用域的。而是会带上文件名作为命名空间。这是什么意思呢?看下面代码就明白了:
如果不加as * 会报错:

<style lang="scss" scoped>
.text {
  font-size: 20px;
  color: $theme-color;
}
</style> 
————————————————————————————————————————————————————————————
 [vite] Pre-transform error: [sass] Undefined variable.

4color: $theme-color;
^^^^^^^^^^^^

  src\views\index.vue 4:10  root stylesheet

如果你不想加as * 但又不想报错那就需要这么做:
1、直接在需要文件中直接导入公共文件,然后在使用。
2、如下:

<style lang="scss" scoped>
.text {
  font-size: 20px;
  color: index.$theme-color;  //否则就需要在这个公共变量前加上文件名
}
</style>

友情提醒一下:使用 as * 有可能会造成样式全局污染。所以使用时要注意管理好变量的命名

以下为个人sass的完整引用及配置:

variables.scss文件:

$theme-color:

index.scss文件:

@forward './variables.scss';
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

vite.config.js配置文件

css: {
      preprocessorOptions: {
        scss: {
          api: 'modern-compiler',
          silenceDeprecations: ['legacy-js-api'],
          additionalData: `@use "@/assets/style/index.scss" as *;`
        }
      }
    }

vue文件:

<style lang="scss" scoped>
.text {
  font-size: 20px;
  color: $theme-color;
}
</style>

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
前端2026-07-17
HTML Form 可以把 POST 响应加载进 iframe
在接入支付验证、身份认证或第三方授权页面时,我们经常会遇到这样的流程: 1. 后端返回一个第三方接口地址。 2. 这个地址必须通过 请求访问。 3. 接口返回 HTML,或者重定向到真正的验证页面。 4. 验证页面需要嵌入当前网站,而不是打开新标签页。 5. 验证完成后,当前页面继续执行后续业务。 第一次遇到这个需求,很容易想到: 但涉及第三方支付时,这种方式通常会遇到 CORS、Cookie、重定向和跨域页面读取限制。 实际上,HTM...
学习
前端2026-05-29
前端判断一个网页是否允许被 iframe 内嵌
前端 不能 100% 准确提前判断 一个网页是否允许被 iframe 内嵌,因为决定权主要在目标网站返回的 HTTP 响应头 里,而普通前端 JS 通常读不到跨域页面的响应头。 核心判断看这两个东西: 1. 老一点但仍常见。 表示完全不允许被 iframe 嵌入。 表示只允许同源页面 iframe 嵌入。 以前有这个,但现代浏览器支持很差,基本不建议依赖。 2. 现在更推荐看这个。 表示不允许任何页面嵌入。 表示只允许同源嵌入。 表示只...
学习
前端2026-03-20
网页唤起 Android App 调试笔记(App Links)
&nbsp; 在最近的项目中,我遇到了 网页访问特定 URL 应该唤起 Android App,但实际只打开网页 的问题。通过调试和排查,整理出以下经验和步骤。 1\. 项目与环境信息(脱敏处理) 网站域名: 唤起页面: Android App 包名: intent filter 配置示例: assetlinks.json 已上线,包含 App 的 SHA256 签名指纹 2\. 问题现象 用户访问 页面时, 网页打开了,但 App 没...
学习
前端2026-03-02
深入理解 Cookie:安全属性、访问边界与渲染场景实践
本文系统梳理 Cookie 核心机制,聚焦 HttpOnly/SameSite 等安全属性 、 访问权限边界 、 CSR/SSR 差异 ,附关键代码示例与安全清单。适合开发查阅与知识沉淀。 一、Cookie 是什么?为什么需要它? HTTP 是无状态协议。Cookie 是服务端通过 响应头下发、浏览器自动存储并在后续 同源请求中携带 的小型文本数据(通常 ≤4KB),用于: 会话维持(Session ID) 用户偏好(语言/主题) 跨请...
学习
前端2026-03-02
退出登录时 Cookie 清除指南
核心结论 :登出 ≠ 单方面操作。HttpOnly 与非 HttpOnly Cookie 需 前后端协同清除 ,缺一不可。残留 Cookie = 安全隐患 + 用户体验漏洞。 🔒 为什么不能“一键清空”? 浏览器出于安全设计: 后端 :只能通过 响应头清除 自己设置过 的 Cookie(需属性完全匹配) 前端 JS :可读写非 HttpOnly Cookie,但 无法触碰 HttpOnly Cookie 无“清除全部”API :任何服...
学习
前端2025-12-15
懒加载图片在同一个 Item 中逐个出现的原因与解决方案
懒加载图片在同一个 Item 中逐个出现的原因与解决方案 适用场景 :使用原生 实现图片懒加载的动态列表,每个列表项(item)包含多张图片。 📌 问题描述 在开发一个动态渲染的列表时,每个 item 中包含三张图片,并使用 HTML 原生的懒加载属性: 观察到的现象: 开启懒加载时 :三张图片 不是同时出现 ,而是 从左到右(或从上到下)依次加载显示 ,有明显的时间差。 关闭懒加载(移除 )后 :三张图片 看起来是一起出现的 ,视觉...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录