Gulpfile:如何将每个 SCSS 编译成具有相同名称但具有其他通用样式的单独 CSS

Gulpfile: How to compile each SCSS into separate CSS with same name but with additional common styles

首先,我希望你们要温柔。我最近一年没有写太多代码,自从 gulp 更新后,我将语法更改为编写函数和导出,然后我以某种方式使其工作,并且到目前为止没有任何更改,不知道他们是否更改了其他内容.我对它现在的样子很满意,但我不知道如何让它以另一种方式工作。

所以不管怎样,我现在正在做一个项目,那里会有很多 html,每个都有完全不同的风格,但有些会很常见。我想为每个 html 创建一个具有通用样式的 main.scss 文件,但我想为每个 html 创建一个具有特定样式的单独 scss。通过这种方式,我最终想要一个单独的 css 文件,该文件由具有相同名称的特定 scss 与 main.scss 组合而成,这样它就不必下载一个大文件文件,但只有我需要的样式。

示例:

main.scss
01.scss
02.scss
03.scss

将编译为:

01.css ( main.scss + 01.scss )
02.css ( main.scss + 02.scss )
03.css ( main.scss + 03.scss )

这是我现在的 gulp 文件:

const gulp = require('gulp');
const sass = require('gulp-sass');
const browserSync = require('browser-sync').create();

function style() {
  return gulp.src('./scss/**/*.scss')
   .pipe(sass().on('error', sass.logError))
   .pipe(gulp.dest('./css'))
   .pipe(browserSync.stream());
}

function watch() {
  browserSync.init({
    server: {
      baseDir: './'
    }
  });
  gulp.watch('./scss/**/*.scss', style);
  gulp.watch('./*.html').on('change', browserSync.reload);
  gulp.watch('./js/**/*.js').on('change', browserSync.reload);
}

exports.style = style;
exports.watch = watch;

如果您有更好的方法,我将不胜感激。

我认为您必须将 main.scss 导入每个其他文件并从 gulp.src.

中排除 main.scss
function style() {
  return gulp.src(['./scss/**/*.scss', '!./scss/**/main.scss'])

  .pipe(sass().on('error', sass.logError))
  .pipe(gulp.dest('./css'))
  .pipe(browserSync.stream());
}

'!./scss/**/main.scss' 这会否定或排除该文件被传递到此任务中 - 我假设 main.scss 与其他 scss 文件位于同一文件夹中,如果不是情况下你将不得不修改路径。

然后 @import main.scss 进入您的每个 01.scss02.scss 等文件:

@import "main.scss"; // 也假定在同一文件夹中

您可以将此导入语句放在文件中的任何位置,如果它首先出现,则任何 main.scss 样式都将被 0x.scss 文件其余部分中的冲突样式覆盖。如果将 import 语句放在末尾,则 main.scss 样式将覆盖任何先前的冲突样式。


注意:你真的应该使用 @use 而不是 @importgulp-dart-sass instead of gulp-sass at this point. See sass @use rule.

// in your gulpfile.js const sass = require('gulp-dart-sass'); // 一旦安装

@use "main.scss"; // 必须在每个scss文件的顶部,比如01.scss