Почему я должен сохранить исходный файл LESS дважды, прежде чем Gulp/Vinyl-ftp загрузит файл bootstrap.min.css?

У меня есть gulpfile.js с содержанием ниже. Я хочу, чтобы он создал bootstrap.min.css и загрузил его на сервер, как только я сохраню файл LESS в папке /less. Проблема в том, что только после двойного сохранения файла будет загружен конечный результат. Я думаю, что я делаю что-то не так.

Вот код, который я использую:

    var gulp = require ('gulp'),
    //cleanCSS = require('gulp-clean-css'),
    autoprefixer = require('gulp-autoprefixer'),
    less = require('gulp-less'),
    plumber = require('gulp-plumber'),
    sourcemaps = require('gulp-sourcemaps'),
    rename = require('gulp-rename'),
    gutil = require('gulp-util'),
    ftp = require ('vinyl-ftp');


// Styles Task using LESS
// Uglifies
gulp.task('less', function(){
    gulp.src('../less/bootstrap.less')
    .pipe(plumber())
    .pipe(less())
    .pipe(autoprefixer({}))
    .pipe(sourcemaps.init())
    .pipe(rename({suffix: '.min'}))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('../css/'));
});

    // Vinyl FTP 
    gulp.task( 'deploy', function () {

        var conn = ftp.create( {
            host:     '[ftp-address]',
            user:     '[ftp-user]',
            password: '[password]',
            parallel: 10,
            log:      gutil.log
        } );

        var globs = ['../css/bootstrap.min.css'];



        return gulp.src( globs, { base: '.', buffer: false } )
            .pipe( conn.newer( '/public_html/[folder/on/server]/css/' ) ) // only upload newer files
            .pipe( conn.dest( '/public_html/[folder/on/server]/css/' ) );

    } );
// Watch Task
// Watches JS
gulp.task('watch', function(){
    gulp.watch('../less/**/*.less', ['less','deploy']);
});

gulp.task ('default', ['less','deploy','watch']);

Так как я не эксперт по javascript / npm / gulp / node.js, я в растерянности. Меня беспокоит, что мне нужно сохранить менее файл дважды. Кто-нибудь может определить ошибку? Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

Thanx,

Thom

1 ответ

Решение

У вас есть две возможные проблемы:

  1. Поместите возврат в ваше "менее" задание, чтобы глоток знал, что он закончился.
  2. Вы не можете предполагать в своей задаче 'watch', что ['less', 'deploy'] запускается / завершается в любом конкретном порядке. Они запускаются параллельно, поэтому порядок может отличаться. То же самое с задачей "по умолчанию".

Лучше сделать свою задачу развертывания зависимой от задачи "меньше"

gulp.task( 'deploy', ['less'], function () {

и изменить на

 gulp.watch('../less/**/*.less', ['deploy']);


// Styles Task using LESS
// Uglifies
gulp.task('less', function(){
// add the return to the next line
  return gulp.src('../less/bootstrap.less')
  .pipe(plumber())
  .pipe(less())
  .pipe(autoprefixer({}))
  .pipe(sourcemaps.init())
  .pipe(rename({suffix: '.min'}))
  .pipe(sourcemaps.write('.'))
  .pipe(gulp.dest('../css/'));
});

// Watch Task
// Watches JS
gulp.task('watch', function(){
  gulp.watch('../less/**/*.less', ['deploy']);
});

// Vinyl FTP 
gulp.task( 'deploy', ['less'], function () {

    var conn = ftp.create( {
        host:     '[ftp-address]',
        user:     '[ftp-user]',
        password: '[password]',
        parallel: 10,
        log:      gutil.log
    } );

    var globs = ['../css/bootstrap.min.css'];

    return gulp.src( globs, { base: '.', buffer: false } )
        .pipe( conn.newer( '/public_html/[folder/on/server]/css/' ) ) // only upload newer files
        .pipe( conn.dest( '/public_html/[folder/on/server]/css/' ) );

} );
Другие вопросы по тегам