使用gulp-sftp仅上传已更改的文件

时间:2014-08-03 02:23:59

标签: node.js sftp gulp gulp-watch

我在gulp中有以下任务:

gulp.task('sync-frontend', /*['build-frontend'],*/ function()
{

    if(config.layout.frontend.syncOnBuild)
        return gulp
            .src(config.layout.frontend.distDir + '/**')
            .pipe(changed(config.layout.frontend.distDir, {hasChanged: changed.compareSha1Digest}))
            //.pipe(debug())
            .pipe(gulp.dest(config.layout.frontend.distDir))
            .pipe(sftp
            ({

                host: config.sftp.host,
                port: config.sftp.port,
                user: config.sftp.user,
                pass: config.sftp.pass,
                remotePath: (config.layout.frontend.remotePath ? config.layout.frontend.remotePath : config.sftp.remotePath )

            }));

});

config.layout.frontend.distDir值为'httpdocs'。

问题是没有文件被上传,无论它们是否被更改(我已经尝试在默认情况下保留gulp-changed的hasChange选项。我总是得到以下输出:

[20:45:52] Using gulpfile /Storage/Portable/Sync/Projects/Prataria/web-prataria/gulpfile.js
[20:45:52] Starting 'sync-frontend'...
[20:45:52] gulp-sftp: No files uploaded
[20:45:52] Finished 'sync-frontend' after 503 ms

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我遇到了这个问题,发现gulp.src上的格式需要以./为前缀才能找到正确的文件夹。因此,请./httpdocs作为config.layout.frontend.distDir的价值。

答案 1 :(得分:0)

您可以与另一个图书馆一起使用gulp-sftp,例如“gulp-changed”或“gulp-watch”。

答案 2 :(得分:0)

尝试使用vinyl-ftp库。 newer函数可用于仅上传较新的文件。该库的自述文件甚至包括一个示例Gulp任务,该任务在运行中显示了这一点:

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

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

    var conn = ftp.create( {
        host:     'mywebsite.tld',
        user:     'me',
        password: 'mypass',
        parallel: 10,
        log:      gutil.log
    } );

    var globs = [
        'src/**',
        'css/**',
        '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( '/public_html' ) ) // only upload newer files
        .pipe( conn.dest( '/public_html' ) );

} );