Gulpfile.js для SFTP

Этот gulpfile немного отличается от предыдущего. Файл для работы с less, es6, sftp. Для удаления папок на сервере (для очистки кеша) используем скрипт 'gulp-ssh'. Скрипты и стили минифицируем. Файлы js склеиваем в один с помощью плагина 'gulp-include'. Для стилей делаем sourcemap.

var path = '/var/www/site.com/public_html/assets/tmpl/';
var cacheTpl = '/var/www/site.com/public_html/core/cache/resource';

var config = {
    host: 'site.com',
    user: 'login',
    pass: 'password'
};

var accessSsh = {
    host: config.host,
    username: config.user,
    password: config.pass
};

//base part
var gulp = require('gulp'),
    rename  = require('gulp-rename'),
    sourcemaps = require('gulp-sourcemaps');

//css part
var less = require('gulp-less'),
    cleanCSS = require('gulp-clean-css'),
    autoprefixer = require('gulp-autoprefixer');

//ftp part
var sftp = require('gulp-sftp');
var GulpSSH = require('gulp-ssh');
var gulpSSH = new GulpSSH({sshConfig: accessSsh});

//js part
var include = require('gulp-include'),
    uglify  = require('gulp-uglify'),
    babel = require('gulp-babel');

function setAccess(folder) {
    return {
        host: config.host,
        user: config.user,
        pass: config.pass,
        remotePath: path + folder
    }
}

//обработка ошибок
function swallowError(error){
    console.log(error.toString());
    this.emit('end');
}

//задача на выполнение всех действий
gulp.task('default', ['gulp_watch']);

//ватчер над файлами less
gulp.task('gulp_watch', function () {
    gulp.watch('dev/less/**/*.less', ['ftp_css']);
    gulp.watch('dev/js/**/*.js', ['ftp_js']);
    gulp.watch('elements/**/*.tpl', ['kill_cache']);
});

//процедура сборки css
gulp.task('less', function () {
    return gulp.src('./dev/less/main.less')
        .pipe(sourcemaps.init())
        .pipe(less({
            parth: ['./less']
        }))
        .on('error', swallowError)
        .pipe(autoprefixer({
            browsers: ['last 10 versions', '> 5%'],
            cascade: false
        }))
        .pipe(cleanCSS())
        .pipe(rename('style.css'))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest('./css'));
});

//грузим css на сервак
gulp.task('ftp_css', ['less'], function () {
    return gulp.src('./css/**')
        .pipe(sftp(setAccess('css')));
});

//собираем js
gulp.task('scripts', function() {
    return gulp.src('dev/js/app.js')
        .pipe(include())
        .pipe(rename('app.min.js'))
        .pipe(babel({
            presets: ['es2015']
        }))
        .on('error', swallowError)
        .pipe(uglify()) //минифицируем js файл
        .pipe(gulp.dest('js'));   //сохраняем минифицированную версию
});

//грузим js на сервак
gulp.task('ftp_js', ['scripts'], function () {
    return gulp.src('./js/**')
        .pipe(sftp(setAccess('js')));
});

//удаляем некую директорию на сервере
gulp.task('kill_cache', function(){
    return gulpSSH
        .shell(['rm -rf ' + cacheTpl], {filePath: 'shell.log'})
        .pipe(gulp.dest('logs')).on('end', function () {
            console.log('cache removed');
        });
});
Share: