【问题标题】:Import all sass file within directory with webpack使用 webpack 导入目录中的所有 sass 文件
【发布时间】:2017-09-03 03:39:48
【问题描述】:

我目前正在尝试使用 Webpack 打包我的所有文件,但在处理多个文件夹和 .scss 文件时,我不知道如何继续。

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

functions
    - _mixin.scss
    - _function.scss
    - [...]
variables
    - _colors.scss
    - _typo.scss
    - [...]
ui
    - _button.scss
    - _grid.scss
    - [...]
view
    - _home.scss
    - _about.scss
    - [...]

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

@import 'function/_mixin.scss';
@import 'function/_function.scss';
@import 'variables/_colors.scss';
@import 'variables/_typo.scss';
[...]

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

【问题讨论】:

  • 如果您将 scss 文件导入到组件 js 中,则用户将需要生成的 css(即通过加载器)。如果您想将 scss 编译为一个文件而不将它们作为组件导入 webpack,则删除 @import scss 语句并通过 npm 脚本或其他方式(grunt/node-sass 等)单独编译它们
  • @DenisTsoi 我只是在导入已编译的 css。我的意思是,比如我在ui文件夹里面新建一个文件,我需要手动添加@import 'ui/newfile';在 main.scss 文件上。我曾经使用grunt sass-compile-imports 自动完成。
  • hmmm - 我想这有点不常见(因为它假设您的工作流程确保样式与组件 js/html 依赖项相关联) - 因此自动添加所有这样的部分可能并不常见支持的。没有什么能阻止你说,使用 grunt 自动编译 scss 并要求 main.scss 进入入口文件。
  • 你可以使用 globbing 并尝试一下(还有一个 node-sass-globbing 包)npmjs.com/package/node-sass-globbing

标签: sass webpack


【解决方案1】:

当 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()
          }
        }
      }
    ]

这样使用。

// Import all files inside the `scss` directory and subdirectories.
@import 'scss/**/*.scss';
@import 'scss/component-*';

【讨论】:

  • 你能建议使用 Webpack 4 的说明吗?我看到unknown property 'importer'
  • 我进一步挖掘并了解到将它作为options { sassOptions: importer: globIOmporter() } 传递通过了选项验证,但仍然无法解决任何全局导入。
  • 对我不起作用,webpack 4.46.0,我试图修改这个配置:gist.github.com/jez500/4f4295778e386ddbc96c2377e3415fc3
【解决方案2】:

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

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

它支持通配符

@import "foo/**/*";

输出到

@import "foo/1.scss";
@import "foo/bar/2.scss";
@import "foo/bar/3.scss";

【讨论】:

猜你喜欢
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2014-04-26
相关资源
最近更新 更多