使用 webpack 导入目录中的所有 sass 文件

cel*_*ade 6 sass webpack

我目前正在尝试使用 Webpack 来捆绑我的所有文件,但在处理多个文件夹和.scss文件时我不知道如何进行。

我曾经使用 grunt 来完成这些任务,这是我的文件夹结构示例:

functions
    - _mixin.scss
    - _function.scss
    - [...]
variables
    - _colors.scss
    - _typo.scss
    - [...]
ui
    - _button.scss
    - _grid.scss
    - [...]
view
    - _home.scss
    - _about.scss
    - [...]
Run Code Online (Sandbox Code Playgroud)

随着Grunt我将运行一个任务来生成一个名为main.scss包含所有的文件@import,例如:

@import 'function/_mixin.scss';
@import 'function/_function.scss';
@import 'variables/_colors.scss';
@import 'variables/_typo.scss';
[...]
Run Code Online (Sandbox Code Playgroud)

目前我正在我的.js文件中指定一个导入(与 结合使用extract-text-webpack-plugin)来定义main.scss文件,但是每个新的import或旧的都需要手动添加/删除。有没有办法用 自动执行此任务WebPack

Jun*_*Nam 12

当 webpack 3 或 4

使用node-sass-glob-importer

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const globImporter = require('node-sass-glob-importer');

    ...
    test: /\.(scss|sass)$/,
    use: [
      MiniCssExtractPlugin.loader,
      "css-loader",
      {
        loader: "sass-loader",
        options: {
          sassOptions: {
            importer: globImporter()
          }
        }
      }
    ]
Run Code Online (Sandbox Code Playgroud)

用这种方式。

// Import all files inside the `scss` directory and subdirectories.
@import 'scss/**/*.scss';
@import 'scss/component-*';
Run Code Online (Sandbox Code Playgroud)


Den*_*soi 7

注意 - 仅适用于webpack 2(需要更新 webpack 3^)

你可以使用插件import-glob-loader github / npm

它支持通配

@import "foo/**/*";
Run Code Online (Sandbox Code Playgroud)

输出到

@import "foo/1.scss";
@import "foo/bar/2.scss";
@import "foo/bar/3.scss";
Run Code Online (Sandbox Code Playgroud)

  • 这是 [不适用于 webpack 3+](https://github.com/Aintaer/import-glob-loader/issues/10) (8认同)