@mivo

Как синхронно запустить две задачи через GULP-SEQUENCE работающие корректно с одним файлом?

Задача 1:
Скачать файл с данными и добавить его к выгружаемому проекту.
Задача 2:
Грохнуть папку на сервере и выгрузить проект.
//------------------------- gulpfile.js-----------------------------------------
'use strict';

const gulp         = require('gulp');
const sequence     = require('gulp-sequence');

const pubPth       = 'public_html';                // Сюда проект собирается.
const verPth       = 'versions';                   // Папка с версиями. 
const devPth       = 'app/dev';                    // Папка разработки.

gulp.task('deploy', sequence('dwnldt', 'upload')); // Таск выдающий ошибку.

lazyRequireTask('dwnldt', './tasks/dwnldt', {      // Скачивает файл данных. 
  hst: 'хост',                                     // Сам по себе работает без 
                                                   // ошибок.
  usr: 'логин',
  psw: 'пароль',
  prt: 21,
  drd: '/domains/сайт/dir',                        // Из этой папки надо скачать 
                                                   // файлы с данными 
  dld: 'app/dev/htmlphp/dir/',                     // в эту папку 
  dst: pubPth + '/dir'                             // и отправить копию в эту.   
});

lazyRequireTask('upload', './tasks/upload', {      // Грохает папку на сервере,
                                                   // выгружает проект. 
  hst: 'хост',                                     // Сам по себе работает без 
                                                   // ошибок.
  usr: 'логин',
  psw: 'пароль',
  prt: 21,
  prl: 9,
  pth: '/domains/сайт',
  bs_: pubPth,
  glb:[pubPth + '/**/*',
       pubPth + '/**/.htaccess'],
  pjn: 'package.json',
  vnm: verPth,
  src:['app/**/*',
       'tasks/**/*', 
       'gulpfile.js',
       'package.json',
       'aa_tasks.js',
       'aa_changes.js']
});

function lazyRequireTask(taskName, Pth, options) {
  options = options || {};
  options.taskName = taskName;
  gulp.task(taskName, function(callback) {
    let task = require(Pth).call(this, options);
    return task(callback);
  });
}

//------------------------- ФАЙЛЫ ----------------------------------------------
//----------------------- ./tasks/dwnldt ---------------------------------------
'use strict';

const gulp    = require('gulp');
const fClient = require('ftp-client');
const fs      = require('fs'); 

const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV == 'development';

module.exports = function(options) {
  return function (cb) {
        
    if (!isDevelopment){
      var cfg = {
        host:     options.hst,
        user:     options.usr,
        password: options.psw,
        port:     options.prt
      };
      var opt = {
        logging: 'basic'
      };      

      var newFclient = new fClient(cfg, opt);
      newFclient.connect(function () {       
        newFclient.download(options.drd, options.dld, {
          overwrite: 'all'  
        }, function (result) {
          console.log(result);
          gulp.src(options.dld + '**/*')
          .pipe(gulp.dest(options.dst));
        });
      });
    }

    cb();
  };
};
//----------------------- ./tasks/upload ---------------------------------------
'use strict';

const gulp    = require('gulp');
const vFtp    = require('vinyl-ftp' );
const fs      = require('fs');

const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV == 'development';

module.exports = function(options) {
  return function (cb) {
    
    if (!isDevelopment){

      var cfg = {
        host:     options.hst,
        user:     options.usr,
        password: options.psw,
        parallel: options.prl,
        port:     options.prt
      };     

      var vftpCreate = vFtp.create(cfg);
      vftpCreate.rmdir(options.pth, function(e){
        if (e === undefined) {
          // using base = '.' will transfer everything to /public_html correctly 
          // turn off buffering in gulp.src for best performance 
          gulp.src(options.glb, {base: options.bs_, buffer: false})
            .pipe(vftpCreate.newer(options.pth)) // only upload newer files 
            .pipe(vftpCreate.dest(options.pth));
        }else console.log('BLABLALBA ' + e);
      });
    }

    fs.readFile(options.pjn, function(err, data) {  
      if (err) throw err;  
      else {  
        let packageJson = JSON.parse(data.toString());
        gulp.src(options.src, {base: '.', buffer: false})
        .pipe(gulp.dest(options.vnm + '/' + packageJson.version));
        console.log('upload in: ' + options.vnm + '/' + packageJson.version);
      }  
    });

    cb();
  };
};
//------------------------------------------------------------------------------
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы