@use报“Module not found”主因是Sass模块系统未启动:文件名未以下划线开头、@use未置顶或混用@import致整文件降级为legacy模式,此时@use被静默忽略。

@use '@/styles/_vars' 报 Module not found
不是路径写错了,是 Sass 模块系统压根没启动——@use 被静默忽略,变量自然找不到。根本原因通常是文件名没以下划线开头、@use 没放在第一行,或混用了 @import 导致整文件降级为 legacy 模式。
-
@use必须是 SCSS 文件中第一个非空、非注释的语句;不能包在@media、@mixin或任何 CSS 规则里 - 被引入的文件名必须以下划线开头,比如
_vars.scss;写成vars.scss或vars.css都会失败 - 别名路径(如
@/styles)需由构建工具(Webpack/Vite)解析,但 Sass 本身不认@/—— 必须通过sass-loader的implementation(Dart Sass)+additionalData或自定义importer插件桥接 - Vite 用户尤其注意:
css.preprocessorOptions.sass.additionalData里不能直接写@use '@/styles/_vars',得先用alias把@/映射到实际路径,再让 Dart Sass 知道该从哪找模块
webpackImporter: true 没开,~ 开头的 @import 全部失效
@import '~bootstrap/scss/bootstrap' 报 Can't resolve,核心不是路径错,而是 sass-loader 默认关闭了 Webpack 模块解析能力。Sass 编译器自己不读 resolve.alias,只认 includePaths 和显式启用的 webpackImporter。
- 必须在
sass-loader的options中加webpackImporter: true,否则~被当普通字符串处理 - 同时配
includePaths: [path.resolve(__dirname, 'node_modules')],否则即使开了webpackImporter,Sass 解析器也找不到node_modules里的文件 - Vite 不支持
~,得用alias配@/node_modules/,再在css.preprocessorOptions.sass.additionalData中注入路径前缀 - Angular CLI v12+ 默认不再隐式启用
webpackImporter,必须在angular.json中显式配置stylePreprocessorOptions.includePaths
Dart Sass vs node-sass:别名支持差异极大
node-sass 已停更,不支持现代模块系统和别名路径解析;sass(Dart Sass)才是当前唯一维护的实现,且只有它能正确处理 @use + 别名组合。
- 安装命令必须是
npm install -D sass-loader sass,不是node-sass - Webpack 配置中
sass-loader的implementation字段必须指向require('sass'),否则仍走node-sass旧链 - Vite 默认用 Dart Sass,但若项目里残留
node-sass,会导致@use降级失败,删掉node-sass并清node_modules再重装 - 别名路径(如
@/styles)在@use中生效的前提是:Dart Sass 的importer函数能接收并重写路径——多数构建工具插件(如vite-plugin-sass-dart)已内置,但自定义 loader 需手动实现
url() 在第三方 SCSS 里 404,和别名无关但常被误判
@import 成功、样式编译无报错,但最终 CSS 里的 url('./fonts/glyphicons.woff') 仍是原样输出,浏览器加载 404——这不是别名问题,是 loader 链断在了 css-loader 或 file-loader 层。
立即学习“前端免费学习笔记(深入)”;
-
@import过的第三方 SCSS(如 Bootstrap)内部的url()相对路径,是以该 SCSS 文件自身位置为基准解析的,Webpack 默认不处理node_modules下的资源引用 - 必须给
css-loader加options: { url: true }(Webpack 5+ 默认开启,旧版需显式设) -
file-loader或url-loader的test规则要加include: [path.resolve(__dirname, 'node_modules')],否则字体、图标等资源不被接管 - Vite 用户注意:
css.url配置默认只处理项目内资源,第三方库需用assetsInclude显式声明扩展名
@use 解析,取决于三件事:构建工具是否把别名透传给 Dart Sass、Sass 是否以模块模式运行、loader 链是否完整覆盖资源引用。漏掉任意一环,都会表现为“找不到模块”,但真正卡住的位置可能差着两层配置。


















