You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6+Webpacker项目中webpack-import-glob-loader无法处理.scss文件

解决webpack-import-glob-loader处理SCSS通配符导入报错的问题

1. 检查Loader执行顺序

webpack loader是从右到左执行的,webpack-import-glob-loader必须在sass-loader之前处理文件(先把通配符展开为具体路径,再交给Sass解析)。确保你的config/webpack/environment.js配置顺序正确:

const { environment } = require('@rails/webpacker');

// 在已有的sass loader规则末尾添加glob loader(保证执行优先级更高)
environment.loaders.get('sass').use.push('webpack-import-glob-loader');

module.exports = environment;

2. 修正导入路径

你已将webpacker的source_path设为app/assets,意味着app/assets是webpack的根查找目录。当前你写的@import "stylesheets/variables/**/*.scss"多了一层stylesheets前缀——因为stylesheets本身就在app/assets下,直接写@import "variables/**/*.scss"即可。

如果单独导入@import "stylesheets/variables/colors.scss"能成功,说明app/assets/stylesheets被加入了webpack的解析路径,此时通配符导入也应该去掉stylesheets前缀。

3. 补充Webpack Resolve配置

确保webpack能正确识别样式文件目录,在config/webpack/environment.js中添加resolve规则:

const { environment } = require('@rails/webpacker');
const path = require('path');

environment.config.merge({
  resolve: {
    modules: [path.resolve(__dirname, '../../app/assets/stylesheets'), 'node_modules'],
    alias: {
      'styles': path.resolve(__dirname, '../../app/assets/stylesheets')
    }
  }
});

// 保持glob loader配置
environment.loaders.get('sass').use.push('webpack-import-glob-loader');

module.exports = environment;

之后可以用更简洁的别名导入:@import "styles/variables/**/*.scss"

4. 验证依赖版本兼容性

Rails 6的webpacker对应webpack 4.x版本,确保依赖版本适配:

  • webpack-import-glob-loader建议安装^1.7.2
  • sass-loader建议安装^9.0.3(适配webpack 4)
  • sass建议安装^1.32.x及以上

重新安装依赖:

yarn add webpack-import-glob-loader@^1.7.2 sass-loader@^9.0.3 sass --dev

5. 清理缓存重新构建

缓存可能导致路径解析异常,执行以下命令清理后重试:

rm -rf tmp/cache/webpacker
./bin/webpack --clean
./bin/webpack

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:48:03