Gulpjs combine two tasks into a single task

后端 未结 11 1034
攒了一身酷
攒了一身酷 2020-12-24 01:56

I currently have two tasks, that both compile sass files. I would still like to concat the two directories into separate files but it seems that it would be more maintainabl

相关标签:
11条回答
  • 2020-12-24 02:15

    I think the proper way of doing this is using task dependency.

    In gulp you can define tasks that needs to be run before a given task.

    For instance:

    gulp.task('scripts', ['clean'], function () {
        // gulp.src( ...
    });
    

    When doing gulp scripts in the Terminal, clean is run before the scripts task.

    In your example I'd have the two seperate SASS tasks as a dependency of a common SASS task. Something like:

    // Compile Our Sass
    gulp.task('bootstrap-sass', function() {
      return gulp.src('./public/bower/bootstrap-sass/lib/*.scss')
        .pipe(sass())
        .pipe(contact('bootstrap.css'))
        .pipe(gulp.dest('./public/dist/css'));
    });
    
    gulp.task('site-sass', function() {
      return gulp.src('./public/app/scss/*.scss')
        .pipe(sass())
        .pipe(contact('site.css'))
        .pipe(gulp.dest('./public/dist/css'));
    });
    
    gulp.task('sass', ['bootstrap-sass', 'site-sass']);
    

    You read more about the task dependecy on the Gulp recipes section: https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

    0 讨论(0)
  • 2020-12-24 02:15

    With Gulp4 you can use:

    • gulp.series for sequential execution
    • gulp.parallel for parallel execution

      gulp.task('default', gulp.series('MyTask001', 'MyTask002'));
      gulp.task('default', gulp.parallel('MyTask001', 'MyTask002'));

    Article about here
    You dont need run-sequence plugin anymore
    You need install: npm install -D gulp@next

    0 讨论(0)
  • 2020-12-24 02:18

    THE SOLUTION: call the functions!!!

    return Promise.all([bootstrap(), site()])
    

    Be aware of the parens bootstrap(), site() so they return a promise :)

    0 讨论(0)
  • 2020-12-24 02:18

    I'm not sure if I understand question correctly, but if I do, this should be a simple solution:

    gulp.task('sass', ['bootstrap-sass', 'site-sass']);
    
    0 讨论(0)
  • 2020-12-24 02:20

    It works.

    var task1 = gulp.src(...)...
    var task2 = gulp.src(...)...
    return [task1, task2];
    
    0 讨论(0)
  • 2020-12-24 02:25

    Solution 1:

    gulp.task('sass', function() {
      gulp.start('bootstrap-sass', 'site-sass');
    })
    

    gulp.start runs tasks in parallel. And it's asynchronous, which means 'bootstrap-sass' may be finished before 'site-sass'. But it's not recommended because

    gulp.start is undocumented on purpose because it can lead to complicated build files and we don't want people using it

    see https://github.com/gulpjs/gulp/issues/426

    Solution 2:

    var runSequence = require('run-sequence');
    gulp.task('sass', function (cb) {
      runSequence(['bootstrap-sass', 'site-sass'], cb);
    });
    

    run-sequence is a gulp plugin.

    Runs a sequence of gulp tasks in the specified order. This function is designed to solve the situation where you have defined run-order, but choose not to or cannot use dependencies.

    runSequence(['bootstrap-sass', 'site-sass'], cb);
    

    This line runs 'boostrap-sass' and 'site-sass' in parallel.If you want to run tasks serially, you can

    runSequence('bootstrap-sass', 'site-sass', cb);
    
    0 讨论(0)
提交回复
热议问题