我在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
有什么想法吗?
答案 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' ) );
} );