【问题标题】:Merge multiple scss files into one css file将多个scss文件合并为一个css文件
【发布时间】:2017-11-16 17:30:34
【问题描述】:

我想将我所有的scss 文件合并到一个压缩的css 文件中:

结构:

  • 样式表/
    • test.scss
    • test2.scss
  • gulpfile.js

我尝试了这两个任务,我在几个答案和教程中找到了,但我总是将 scss 文件放入重复的 css 文件中:

gulp.task('sass', function() {
    return gulp.src('stylesheets/**/*.scss')
      .pipe(sass())
      .pipe(gulp.dest('css/'))
});

gulp.task('sass', function() {
    return gulp.src('stylesheets/**/*.scss')
      .pipe(sass())
      .pipe(gulp.dest('css/styles.css'))
});

!!!效果好!!!

  • 样式表/
    • test.scss
    • test2.scss
  • css/
    • test.css
    • test2.css
  • gulpfile.js

或第二次尝试的任务:

  • 样式表/
    • test.scss
    • test2.scss
  • css/styles.css/
    • test.css
    • test2.css
  • gulpfile.js

???预期结果???

  • 样式表/
    • test.scss
    • test2.scss
  • css/
    • styles.css
  • gulpfile.js

有什么想法吗?

【问题讨论】:

  • 你只需要在 sass() 之后添加一个 concat(styles.css) 调用。看看 gulp-concat。
  • @Mark Works,谢谢!您能否为其他人举个例子,以便我将其标记为正确。干杯
  • 谢谢,我会在几个小时内做一个例子。

标签: gulp gulp-sass


【解决方案1】:

您表示要将文件合并到一个文件中并压缩该文件,因此您需要添加两个插件来完成其中的每一个。

Gulp-concatgulp-uglify

const concat = require('gulp-concat');
const uglify = require('gulp-uglify');

gulp.task('sass', function() {
return gulp.src('stylesheets/**/*.scss')
  .pipe(sass())
  .pipe(concat('styles.css'))
  .pipe(uglify())

  // .pipe(rename({
   //  basename: "styles",
   //   suffix: ".min",
   //   extname: ".css"
  //  }))

  .pipe(gulp.dest('css'))
});

此外,您可能需要添加 gulp-rename 以表明该文件已通过 .min.css 扩展名进行了丑化/缩小(并将您的 html 链接更改为指向该文件名)。

【讨论】:

  • 虽然 concat 会起作用,但我相信 OP 应该首先考虑使用 sass partials。它非常简单,并且可以使代码井井有条。 Concat 可能适用于逻辑分离的样式表。这是一个快速解释 - *.com/a/34890015 所以在样式表文件夹中使用单个 scss 文件导入具有导入规则的模块,例如 @import "components/cards";然后创建以下划线开头的模块(例如 stylesheets/components/_cards.scss)。 Gulp 将全部编译成单个文件,无需任何额外配置。
【解决方案2】:

希望有帮助。

gulp.task('styles', () => {
  gulp.src([path.src.sass])
    .pipe(sassGlob())
    .on('error', util.log)
    .pipe(sass({
       includePaths: ['src/scss'],
    }))
    .on('error', util.log)
    .pipe(gulp.dest(path.dist.css))
});

【讨论】: