gulp - Как да свържа няколко файла с watch?

Искам да избера няколко файла и да генерирам свързани файлове от тях. И също искам да свържа моите променени файлове.
Това е дървото на моите активи:

assets
  - css
  - js
  - sass
    - _midia_queries.scss
    - media-combine.scss
    - query.scss

И така, искам да генерирам maximum.css(./assets/css/media-combine.min.css) и medium.css( ./assets/css/media-combine.min.css, ./assets/css/query.min.css).

И двата .min файла са генерирани от моята css задача. Виж отдолу:

gulp.task('css', function (done) {
    gulp.src(paths.sass.src)
        .pipe(plugins.changed('dist'))
        .pipe(plugins.sass())
        .pipe(plugins.combineMediaQueries())
        .pipe(plugins.autoprefixer())
        .pipe( isProduction ? plugins.minifyCss() : gutil.noop() )
        .pipe( isProduction ? plugins.rename({ suffix: ".min" }) : gutil.noop() )
        .pipe(gulp.dest(paths.css.dest))
        .on("end", done);
});

И моята задача concat-css използва лошия ми подход на множество генерирани файлове:

gulp.task('concat-css', ['css'], function (done) {
    concatType("css", done);
});

function concatType (type, done) {
    if (isProduction) {
        var task = gulp;
        filesToConcat[type].forEach(function (value) {
            value.files.forEach(function (file, fileIndex) {
                value.files[fileIndex] = paths[type].dest + file;
            });

            gutil.log('File', gutil.colors.green(value.compiled), 'is beign concatenated');
            task = gulp.src(value.files)
                .pipe(plugins.concat(value.compiled))
                .pipe(gulp.dest(paths[type].dest));
            gutil.log('Ready to go!');
        });
        task.on("end", done);
    }
}

Актуализация

Когато напиша gulp на моята конзола/терминал, той изпълнява перфектно моите css и concat-css задачи, но когато watch се задейства от промяна на файл, и двете се изпълняват, но само css работи. Моите .min файлове са актуализирани, но свързаните ми файлове не са. Gulp файлът се изпълнява

Някакви идеи за подход към това? Благодаря.


person klauskpm    schedule 21.08.2015    source източник
comment
Възможно ли е това да се дължи на факта, че gulp изпълнява задачи едновременно по подразбиране? Вашите задачи css и css-concat вероятно ще се изпълняват по едно и също време. Тази SO публикация може да помогне   -  person jonowzz    schedule 22.08.2015
comment
Това помогна. И направих няколко промени. И така, сега единственият проблем е, когато моят .scss файл се актуализира, той казва, че свързва файловете ми, но това няма да се случи.   -  person klauskpm    schedule 22.08.2015
comment
Опитайте само да препращате към скрипта 'concat-css' от задачите по подразбиране и гледайте, тъй като в противен случай ще стартирате частта css два пъти. т.е. gulp.task("default", ['concat-css', 'watch']); и gulp.watch(paths.sass.src, ["concat-css"])   -  person jonowzz    schedule 22.08.2015
comment
Пробвал съм го. Дава по-добра производителност, но все още не работи при задачата ми за часовник.   -  person klauskpm    schedule 25.08.2015


Отговори (1)


Съжалявам, това беше логически проблем.

В моята функция concatType, когато настройвах пътя за целевите файлове, но когато се изпълняваше при гледане, пътят беше зададен втори път, като този:

./assets/css/./assets/css/query.min.css

Никога нямаше да проработи. И така, промених това:

 value.files.forEach(function (file, fileIndex) {
     value.files[fileIndex] = paths[type].dest + file;
 });

 task = gulp.src(value.files)

За това:

files = [];
value.files.forEach(function (file) {
    files.push(paths[type].dest + file);
});

task = gulp.src(files)
person klauskpm    schedule 25.08.2015