gulp-ruby-sass错误命令行太长

gulp-ruby-sass error The command line is too long

我有大约30个文件夹,每个文件夹都有scss文件。我正在使用 gulp-ruby-sass 编译 scss。现在它仍然工作正常,今天我创建了新的 scss 文件然后它开始给出以下错误

The command line is too long.

我搜索并了解命令提示符在一定长度后无法处理 cmd。但我不知道如何解决这个问题。请在下面找到我的 gulp 任务

gulp.task('compile-css', function() {
return sass(src + '/app/**/*.scss', { base: 'app' })
    .pipe(gulp.dest(dest + '/app'))
    .pipe(browserSync.reload({ stream: true }))
});

gulp-ruby-sass 似乎没有任何选择可以帮助,open GitHub issue about this problem 已经有几个月了,所以我认为你必须做出应有的选择有一个 hacky 解决方法。

我唯一能想到的是将所有 SCSS 文件拆分成批次并为每个批次调用一次 sass 然后使用 merge-stream.

合并生成的流

为此,您必须首先找到所有 SCSS 文件,这意味着您需要直接使用 glob

这样的解决方案可能如下所示:

var glob = require('glob'); 
var merge  = require('merge-stream');

var maxArgs = 1000;

gulp.task('compile-css', function() {
  var files = glob.sync(src + '/app/**/*.scss');
  var stream = merge();
  while (files.length) {
    stream.add(sass(files.splice(0, maxArgs), { base:'app' }));
  };
  return stream
    .pipe(gulp.dest(dest + '/app'))
    .pipe(browserSync.reload({ stream: true }))
});

您必须尝试 maxArgs 才能找到适合您的值。

下面的代码是我根据 Sven Schoenung 的答案编写的,在循环中做了一些小的修改

gulp.task('compile-css', function() {
var files = glob.sync(src + '/app/**/*.scss');
var stream = merge();

for (var i = 0; i < files.length; i++) {
    var file = files[i];
    stream.add(sass(file, { base: 'app' }));
}

return stream
    .pipe(gulp.dest(dest + '/app'))
    .pipe(browserSync.reload({ stream: true }))
});