Gulp vinyl ftp - 如何使用清洁功能?

Gulp vinyl ftp - how to use clean function?

vinyl-ftp 包有一个功能 clean() 但我不确定如何正确使用它。我需要:

  1. 从我的 build 文件夹中获取所有文件
  2. 将它们放入我的 ftp 服务器上的目标文件夹
  3. 清理本地不可用的文件

我有以下 gulp 任务:

gulp.task('deploy', () => {
  let conn = ftp.create({host:host,user:user,password: password});
  return gulp.src('build/**', {base: './build/', buffer: false })
      .pipe(conn.newer('/path/on/my/server/')) // only upload newer files
      .pipe(conn.dest('/path/on/my/server/'))
      .pipe(conn.clean('build/**', './build/'));
});

1) 和 2) 可以,但是 clean() 函数什么都不做

vinyl-ftp 文档 have this to say:

conn.clean( globs, local[, options] )

Globs remote files, tests if they are locally available at <local>/<remote.relative> and removes them if not.

请注意,globs 需要您的 FTP 服务器上 远程 文件的路径。由于您的远程文件位于 /path/on/my/server/ 中,因此您必须将该路径指定为您的 glob:

  .pipe(conn.clean('/path/on/my/server/**', './build/'));

由于我为此苦苦挣扎,这里是代码的工作和平。它从服务器中删除本地不存在的所有文件,usage 文件夹除外:

var connection = ftp.create({ ... });

connection.clean([
    '/*.*',
    '/!(usage)*',
    '/de/**',
    '/en/**',
    '/images/**',
    '/fonts/**',
    '/json/**',
    '/sounds/**'
], './dist', { base: '/' });

我的文件在本地 ./dist 文件夹中,远程直接在根目录 (/) 中(使用的 ftp 用户)。