Gulp - 仅定位子文件夹中的一个文件

Gulp - Target only a files in Subfolders

我有一个 gulpfile 监视以下文件夹中的更改:

SCSSSource = '../framework/**/*.scss';

这将监视以下示例文件中的更改:

  1. '../framework/styling.scss' // 根文件夹
  2. '../framework/subfolder1/styling.scss'
  3. '../framework/subfolder2/styling.scss'

我想从根文件夹 (1.) 中排除所有文件,只留下一个子文件夹供观看。我应该如何修改 SCSSSource 字符串才能实现?

完整代码:

var gulp = require('gulp');
var watch = require('gulp-watch');
var concat = require('gulp-concat-util');


gulp.task('watch', function(){

  // "./*"  - all in current foler
  // "./**" - all in current foler and subfolders

  // SCSS FILE
  var SCSSPath = '../framework/';
  var SCSSName = '**/*.scss';
  var SCSSSource = SCSSPath + SCSSName;

  function concatSCSS(){
    // concatenate files
    gulp.src(SCSSSource)
    .pipe(concat('_cssfw.scss', {
      process: function(src){
        src = "\n\n\n\/\/ ----------------------------------------------------------------------\n\n"
              + src;
        return src;
      }
    }))
    .pipe(concat.header('\/\/SCSS Framework\n\n'))
    .pipe(gulp.dest(SCSSPath + "./"));
  }

  watch('../framework/**/*.scss', function (info) {
    concatSCSS();
    console.log(info.event + " scss: " + info.history[0].replace(/^.*[\\/]/, ''))
  });

  concatSCSS();

});

我认为您可以使用 glob 模式排除根文件夹中的 .scss 文件,如下所示:

var SCSSSource = SCSSPath + SCSSName;
var exclude = "!../framework/*.scss"
function concatSCSS(){
        // concatenate files
        gulp.src([SCSSSource, exclude])

这样你只能从子目录中获取 .scss 文件