结论:找不到 sass 模块,90% 是因未安装 sass 包或版本不兼容——新版 sass-loader(v12+)强制依赖 Dart Sass(sass 包),不再支持 node-sass;须执行 npm install --save-dev sass sass-loader@^13,删 node_modules 和 lock 文件后重装,并在 webpack 配置中显式指定 implementation: require('sass')。

直接说结论:找不到 sass 模块,90% 是因为项目里没装它,或者装了但 sass-loader 找不到它——不是语法错,是构建链断在第一步。
为什么 sass-loader 报 “Cannot find module 'sass'”
新版 sass-loader(v12+)默认依赖 Dart Sass(即 sass 包),不再兼容已弃用的 node-sass。如果你装的是 node-sass,或根本没装任何 Sass 实现,sass-loader 就会报这个错,连 SCSS 文件都读不进去。
常见诱因:
- 项目初始化后只装了
sass-loader,漏掉sass - 用
npm install node-sass代替npm install sass,但sass-loader不认node-sass - Docker 或 CI 环境里
node_modules没完整复制,sass目录被忽略(尤其 Alpine 镜像下没装 Python/gyp)
怎么装对、装全、让 sass-loader 看得见
执行这三步,别跳:
立即学习“前端免费学习笔记(深入)”;
- 运行
npm install --save-dev sass sass-loader@^13(注意版本,sass-loader@14要求 Webpack 5.80+) - 确认
package.json的devDependencies里有"sass"和"sass-loader",且不是node-sass - 删掉
node_modules和package-lock.json,再npm install—— 旧锁文件可能残留冲突依赖
如果用 Docker(比如你贴的 node:14.16.1-alpine),加一行:RUN npm install --no-cache sass sass-loader@^13 --save-dev,别只靠 COPY package.json 后的 npm install,Alpine 下二进制缺失更常见。
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
Webpack 配置里要不要显式指定 implementation
要。尤其当你同时存在 node-sass 和 sass(比如老包残留),sass-loader 可能误选前者。
在 Webpack config 的 sass-loader 选项中写死:
use: [{
loader: 'sass-loader',
options: {
implementation: require('sass')
}
}]
注意:require('sass') 必须能执行成功——意味着 sass 已在 node_modules 顶层,不能被 hoist 到奇怪位置;如果用 pnpm,检查 .pnpm 链接是否正常。
Vue CLI / Create React App 项目特别注意
它们封装了 sass-loader,但不会自动装 sass。你得手动装,且不能只装全局(npm install -g sass 没用)。
- Vue 项目:运行
vue add style-resources-loader前,先确保sass在本地devDependencies - Create React App:升级到 v5+ 后默认用
sass,但旧项目仍需手动npm install sass,否则npm start直接失败 - HBuilderX 用户:错误路径里出现
compile-dart-sass,说明它试图加载独立插件里的sass,但该插件目录下没node_modules/sass—— 直接在项目根目录装sass即可,别依赖插件自带
真正容易被忽略的点:装完 sass 后,别急着改 SCSS 文件——先跑一次 npx sass --version,确认命令行能调通。如果这里就报错,说明 Node 环境或权限问题比配置更前置。

















