「gulp-sftp-up4」を使って、gulpからSFTPアップをする


目的

gulpで、ファイルのSFTPアップがしたい。
Gitで、コミット履歴からパスコピーしたものを元に、指定したファイルだけアップをしたい・

やったこと

gulp-sftpは、知っていたので使ってみたが、gulp4で使えなかった。
gulp-sftp-up4があった。

npm install gulp-sftp-up4 --save-dev

gulpfile.js

var fs = require('fs');
//設定ファイル
var ftp = JSON.parse(fs.readFileSync('config/ftp.json', 'utf8'));

var gulp = require('gulp');
var sftp = require('gulp-sftp-up4');

// パス指定アップ
// 「upload」の後に「--」つけて「,」で区切る(スペースは入れない)
// npx gulp upload --aa/bb/ccc.html,aaaa.html
gulp.task('upload', function (done) {
  var npm_script_arg = process.argv.slice(3);
  var pathList = npm_script_arg[0].replace('--', '').split(',').map(function(v){
    let arrPath =  v.split('/');
    if(arrPath[0] === '') {
      arrPath.shift();
    }
    if(arrPath[0] === 'src') {
      arrPath.shift();
    }
    // 階層を保持してアップするため「**」つける
    arrPath.unshift('**');
    arrPath.unshift('src');

    // src/**/〜〜
    return arrPath.join('/');
  });

  gulp.src(pathList)
    .pipe(sftp(ftp));
  return done();
});

// srcフォルダの中身をごっそりアップ
gulp.task('upload-all', function (done) {
  gulp.src([
    'src/**/*'
  ])
  .pipe(sftp(ftp));
  return done();
});

備考

FTP情報はconfig/ftp.jsonで管理。