【问题标题】:Compile all SASS files in folder to single CSS file将文件夹中的所有 SASS 文件编译为单个 CSS 文件
【发布时间】:2020-07-08 05:12:20
【问题描述】:

我有一个包含 sass 文件的子文件夹。我想将这些文件编译成一个名为 client-styles.css 的 css 文件,该文件将存储在同一个文件夹中。

我有一个gulpfile 设置,它通过modules 文件夹查找子文件夹和其中的sass 文件并将这些sass 文件编译成css(将它们存储在同一个文件夹中)。

我要编译的文件夹名为client-styles。这是我的文件夹结构:

theme
   - assets
      - src
         - sass
           - client-styles
              - _buttons.scss
              - _typography.scss
              - _core.scss
           - config
              - _mixins.scss
              - _grid.scss
              - _variables.scss
         - styles.scss
   - modules
      - hero
         - hero.html
         - hero.scss
         - hero.css (this file is created when running gulp)
   gulpfile.js

Gulp 正确编译了我的模块 css 文件,但在我当前的设置下,我的 client-styles.css 没有任何编译

这是我目前的gulpfile.js

'use strict';

var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('autoprefixer');
var postcss = require('gulp-postcss');

var paths = {
    styles: {
        src: 'modules/**/*.scss',
        dest: 'modules'
    }
}

function scss() {
    return gulp.src(paths.styles.src)
        .pipe(sass().on('error', sass.logError))
        .pipe(sass({ outputStyle: 'compressed' }))
        .pipe(postcss([autoprefixer()]))
        .pipe(gulp.dest(paths.styles.dest));
}

exports.scss = scss

var themeStyles = {
    styles: {
        src: 'assets/src/sass/client-styles/*.scss',
        dest: 'sass'
    }
}

function themescss() {
    return gulp.src(themeStyles.styles.src)
        .pipe(sass().on('error', sass.logError))
        .pipe(sass({ outputStyle: 'compressed' }))
        .pipe(postcss([autoprefixer()]))
        .pipe(gulp.dest(themeStyles.styles.dest));
}



function watch() {
    scss();
    themescss();
    gulp.watch(paths.styles.src, scss);
    gulp.watch(themeStyles.styles.src, scss);
}

exports.watch = watch;

我离得远吗?

编辑:

styles.scss

@import "config/grid.scss";  
@import "config/mixins.scss";  
@import "config/variables.scss";  

编辑 2

已将我的文件夹结构稍微更新为以下内容

theme
   assets
      src 
        sass
           config
              _variables.scss
              _mixins.scss
              _grid.scss
           client-styles
              _core.scss
              _buttons.scss
              _typography.scss
         _config.scss
         styles.scss

_config.scss

@import "config/grid.scss";  
@import "config/mixins.scss";  
@import "config/variables.scss";

我有这个文件的原因是我可以使用@import "../../assets/src/sass/config.scss"; 在另一个文件中使用varsmixins(比如hero.scss)。

styles.scss

@import "client-styles/buttons";
@import "client-styles/typography";
@import "client-styles/core";

最新gulpfile.js

'use strict';

var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('autoprefixer');
var postcss = require('gulp-postcss');

// for module scss build

var paths = {
    styles: {
        src: 'modules/**/*.scss',
        dest: 'modules'
    }
}

function scss() {
    return gulp.src(paths.styles.src)
        .pipe(sass().on('error', sass.logError))
        .pipe(sass({ outputStyle: 'compressed' }))
        .pipe(postcss([autoprefixer()]))
        .pipe(gulp.dest(paths.styles.dest));
}

exports.scss = scss;

// for theme sass build

var themeStyles = {
    stylestheme: {
        src: 'assets/src/client-styles/*.scss',
        dest: 'sass'
    }
}

function themescss() {
    return gulp.src(themeStyles.stylestheme.src)
        .pipe(sass().on('error', sass.logError))
        .pipe(sass({ outputStyle: 'compressed' }))
        .pipe(postcss([autoprefixer()]))
        .pipe(gulp.dest(themeStyles.stylestheme.dest));
}

exports.themescss = themescss;


// watch

function watch() {
    scss();
    themescss();
    gulp.watch(paths.styles.src, scss);
    gulp.watch(themeStyles.stylestheme.src, scss);
}

exports.watch = watch;

测试:

已经注释掉了第一个监视任务,看看它是否会改变事情。不工作。仍然没有使用客户端样式文件夹 scss 创建 css 文件。

Gulpfile.js 供参考:

var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('autoprefixer');
var postcss = require('gulp-postcss');


var themeStyles = {
    stylestheme: {
        src: 'assets/src/client-styles/*.scss',
        dest: 'assets/src/sass'
    }
}

function themescss() {
    return gulp.src(themeStyles.stylestheme.src)
        .pipe(sass().on('error', sass.logError))
        .pipe(sass({ outputStyle: 'compressed' }))
        .pipe(postcss([autoprefixer()]))
        .pipe(gulp.dest(themeStyles.stylestheme.dest));
}

exports.themescss = themescss;

// watch

function watch() {
    themescss();
    gulp.watch(themeStyles.stylestheme.src, themeStyles);
}

exports.watch = watch;

【问题讨论】:

  • 当你命名一个 .scss 文件时,下划线前缀意味着你必须在另一个文件中导入它的一部分。您可以有一个 style.scss 文件,您将在其中导入所有部分。
  • @AmauryHanser 嗨,对不起,我有一个 styles.scss,我已经编辑了我的问题以显示文件夹结构和文件的外观。
  • 在您的变量 themeStyles 中,您指定路径 assets/src/client-styles/*.scss,但您的 styles.scss 位于 assets/src/*.scss。是错字吗?
  • @AmauryHanser - 好地方,是的,themeStyles 的正确目录是`src: 'assets/src/sass/client-styles/*.scss',`。我已经用正确的路径更新了我的问题

标签: css sass gulp gulp-watch gulp-sass


【解决方案1】:

轻松解决您的配置问题,就是在您的 styles.scss 附近添加新文件 client-styles.scss,其中包含以下内容:

@import "client-styles/buttons";
@import "client-styles/typography";
@import "client-styles/core";

themeStyles函数中修改路径:

var themeStyles = {
  styles: {
    src: 'assets/src/**/*.scss',
    dest: 'assets/src/sass'
  }
}

此更改将为您提供 2 个 css 文件,一个是 styles.css,第二个是 client-styles.scss

另外,我强烈建议您查看7 in 1 pattern - 当我开始使用 Scss 编写样式时,它为我节省了很多时间;)

祝你好运!

附注默认情况下,Gulp 只会提取名称中没有下划线的文件:style.scss - 是的,_style.scss - 不。所以最好只包含 1 个我们想要包含所有项目样式的文件。

【讨论】:

  • 嘿,谢谢,7 合 1 看起来很方便,一定会探索的。至于问题,我已经做了你建议的更改,似乎没有为我创建新文件?我已经用我当前的代码和结构更新了我的问题,以便我们更新。如果你能看一下,以防我错过/误解了你的回答
  • @freddy 嗨)如果我理解正确,Gulp 会创建文件,但不在正确的文件夹中。您可以在项目中搜索 css 文件吗?我还编辑了我的答案并将 themedStyles.styles.dest 更改为 assets/src/sass - 我认为它应该将 css 文件放在所需的文件夹中。
  • 您好,我已经搜索了主题,但没有创建新的 css 文件。然后我将我的dest 更改为dest: 'assets/src/sass'(正如你提到的),但我的主题中的任何地方仍然没有生成 css 文件?
  • 如果没有创建文件,我想 Gulp 根本不起作用;(你能在文件末尾添加const watch = gulp.parallel(watch);,在exports.watch 之前另外,这个配置gist.github.com/jeromecoupe/0b807b0c1050647eb340360902c3203a 是写的在 Gulp(v4) 中 - 也许我们都遗漏了一些关键细节。作为最后的手段,你可以复制示例配置,只更改 pathVariables,然后从那时开始 - 开始删除你不需要的插件。不要在配置更改后忘记执行npm igulp watch
  • 这让我很困惑。 Gulp 正在工作,因为它正在编译 scss()。每当我在modules/folder_name 下创建一个新的.scss 文件时,就会创建一个新的css 文件。尝试为client-styles 文件夹编译它时似乎不起作用
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 2018-03-31
  • 2012-10-13
  • 2020-07-07
相关资源
最近更新 更多