Gulp在手表完成后上传ftp

时间:2016-05-06 22:33:14

标签: ftp gulp

这是我的gulp文件。它应该在更改后编译scss并上传文件。它上传但不总是。我做错了什么?

var gulp = require('gulp'),
    watch = require('gulp-watch'),
    gutil = require( 'gulp-util' ),
    sass = require('gulp-sass'),
    ftp = require( 'vinyl-ftp' );

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

    var conn = ftp.create( {
        host:     'host',
        user:     'user@host',
        password: 'pass',
        parallel: 10,
        log:      gutil.log
    } );

    var globs = [
        'src/**',
        'css/**',
        'build/**',
        'js/**',
        'fonts/**',
        'index.html'
    ];

    // using base = '.' will transfer everything to /public_html correctly
    // turn off buffering in gulp.src for best performance

    return gulp.src( globs, { base: '.', buffer: false } )
        .pipe( conn.newer( '/test' ) ) // only upload newer files
        .pipe( conn.dest( '/test' ) );

} );

gulp.task('css', function () {
    return gulp.src('scss/**/*.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest('css'))
});

gulp.task('watch', function (){
  gulp.watch('scss/**/*.scss', ['css', 'deploy']);
});

1 个答案:

答案 0 :(得分:0)

此行不符合您的预期:

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

运行css任务,然后执行deploy任务。 Gulp执行所有具有最大并发性的任务,除非你另有说明。

这意味着只要css文件发生更改,您的deploy.scss任务就会立即开始运行。根据您的css任务是否在.scss任务开始传输之前完成编译deploy文件,这可能会有效,也可能不会。

您需要告诉gulp仅在<{strong> deploy任务完成后执行css任务

gulp.task( 'deploy', ['css'], function () {
  //...
});