Laravel 混合导入多个 globbed SCSS 文件到 app.scss

Laravel Mix import multiple globbed SCSS files into app.scss

我有一个项目结构,其中每个组件都有自己的 SCSS 文件,我想将所有这些自动导入到项目的主 app.scss 文件中,而不必列出它们全部单独或每次添加新组件时更新列表。我知道合并一堆 globbed CSS 文件可能会导致选择器顺序出现问题,但这不是这里的问题。

我试过了,将 components.scss 文件导入 app.scss:

mix.styles('resources/views/components/*.scss', 'resources/css/components.scss');
mix.sass('resources/css/app.scss', 'public/css');

而且基本有效。

Except, mix.styles() 在 Sass 编译之后运行,因此您最终会导入上一次执行的 components.scss 文件, 而不是当前的。

有办法解决吗?或者还有其他可行的方法吗?

由于 Sass @import 不支持 glob 路径,据我所知,在 app.scss 中做这样的事情是不可能的:

@import 'resources/views/components/*';

发现这可以通过 node-sass-glob-importer 轻松完成,它与 Mix 使用的 Dart Sass 实现兼容:

const sassGlobImporter = require('node-sass-glob-importer');

mix.sass('resources/css/app.scss', 'public/css', {
    sassOptions: {
        importer: sassGlobImporter(),
    }
});

resources/css/app.scss

@import '../views/components/**/*.scss';