black-cat
Version:
Um framework resposivo, com uma coleção de componentes flat feitos com HTML, CSS, Javascript.
355 lines (318 loc) • 11.3 kB
JavaScript
var gulp = require('gulp'),
rename = require("gulp-rename"),
dest = require('gulp-dest'),
runSequence = require('run-sequence'),
zip = require('gulp-zip'),
del = require('del'),
concatFile = require('gulp-concat'),
express = require('express'),
browserSync = require('browser-sync').create();
inquirer = require("inquirer"),
gulpif = require('gulp-if'),
mergeTask = require('merge-stream'),
notify = require('gulp-notify'),
notifier = require('node-notifier'),
map = require('map-stream'),
cache = require('gulp-cache'),
sourcemaps = require('gulp-sourcemaps'),
autoprefixer = require('autoprefixer'),
htmlmin = require('gulp-htmlmin'),
sass = require('gulp-ruby-sass'),
cssnano = require('gulp-cssnano'),
mergerules = require('postcss-merge-rules'),
postcss = require('gulp-postcss'),
jsnamo = require('gulp-uglify'),
jshint = require('gulp-jshint'),
imagemin = require('gulp-imagemin'),
rsync = require('rsyncwrapper'),
destinoProducao = 'raiz',
destinoHomologacao = 'raiz/homologacao',
usuario = 'usuarioteste',
dominio = 'teste.com.br';
gulp.task('criarServidor', ['copiarJquery'], function () {
var escolha,
prompts = [
{
type: 'list',
name: 'tiposervidor',
message: "Qual tipo de serviço você quer usar?",
choices: ['Servidor HTTP', 'Servidor Proxy'],
filter: function (str){
if(str == 'Servidor HTTP'){
return 1;
} else {
return 2;
}
}
}];
inquirer.prompt(prompts, function (answers){
var retorno = answers['tiposervidor'];
if (retorno == 1) {
escolha = 'HTTP';
browserSync.init({
logPrefix: "BlackCat",
minify: false,
port: 4000,
ui: {
port: 4001
},
server: {
baseDir: "./",
directory: false,
index: "server/serverpage.html"
}
});
} else {
escolha = 'Proxy';
browserSync.init({
logPrefix: 'BlackCat',
proxy: '127.0.0.1:8888',
minify: false,
port: 4000,
ui: {
port:4001
}
});
}
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Servidor ' + escolha + ' pronto para uso',
icon: 'notifyicon.png',
sound: true,
wait: true
});
console.log('Iniciando servidor ' + escolha + '.');
});
gulp.watch('http/*.html').on('change', browserSync.reload);
gulp.watch('http/**/*.html').on('change', browserSync.reload);
gulp.watch('http/*.php').on('change', browserSync.reload);
gulp.watch('http/**/*.php').on('change', browserSync.reload);
gulp.watch('http/assets/css/main.css').on('change', browserSync.reload);
gulp.watch('http/assets/js/main.js').on('change', browserSync.reload);
gulp.watch('src/css/*.css', ['css-watch']);
gulp.watch('src/sass/*.scss', ['sass-watch']);
gulp.watch('src/js/*.js', ['js-watch']);
});
gulp.task('sass-watch', ['sass-reload'], browserSync.reload);
gulp.task('sass-reload', function(callback) {
runSequence('compilaSass', 'concatenaCss', callback);
});
gulp.task('css-watch', ['concatenaCss'], browserSync.reload);
gulp.task('js-watch', ['verificarErroJs', 'concatenaJs'], browserSync.reload);
gulp.task('minificaHtml', function() {
return gulp.src('http/*.html', {base: "."})
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('./'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'Arquivos .html minificados',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('compilaSass', function() {
return sass('src/sass/style.scss', {
noCache : true,
precision : 4,
unixNewlines : true
})
.on('error', sass.logError)
.pipe(postcss([ autoprefixer({ browsers: ['last 2 versions']})]))
.pipe(dest('src/css/', { basename: 'stylesass' }))
.pipe(gulp.dest('./'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'Arquivo style.scss compilado com êxito.',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('concatenaCss', function () {
return gulp.src('src/css/*.css')
.pipe(concatFile("main.css"))
.pipe(gulp.dest('http/assets/css/'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'Arquivos .css concatenados com êxito.',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('mrsCss', function() {
var original = gulp.src('http/assets/css/main.css'),
nameMap = 'main.min.css';
function renomeia(Original) {
var varMinify = Original
function funcMinify(varMinify) {
return varMinify
.pipe(postcss([autoprefixer, mergerules]))
.pipe(cssnano())
.pipe(dest('http/assets/css/', { basename : 'min' }));
}
return funcMinify(varMinify)
.pipe(rename("http/assets/css/main.min.css"));
}
return renomeia(original)
.pipe(sourcemaps.init())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'Arquivo main.css minificado e com sourcemap gerado.',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('concatenaJs', function () {
return gulp.src(['src/js/main.js', 'src/js/style.js'])
.pipe(concatFile("main.js"))
.pipe(gulp.dest('http/assets/js/'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'main.js e style.js foram concatenados com êxito.',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('minificaJs', function () {
var originalmain = gulp.src('http/assets/js/main.js'),
originalplugins = gulp.src('src/js/plugins.js'),
contador = 0;
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Iníciando processo de minificação do main.js e plugins.js.',
icon: 'notifyicon.png',
sound: true,
wait: true
});
while(contador < 2){
if(contador === 0){
contador++;
function fcRenomeiaM(originalM) {
function fcMinifyM(varMinifyM) {
return varMinifyM
.pipe(jsnamo({preserveComments: 'all'}))
.pipe(dest('http/assets/css/', { basename : 'mainmin' }));
}
return fcMinifyM(originalM)
.pipe(rename("http/assets/js/main.min.js"));
}
var retornoMain = fcRenomeiaM(originalmain)
.pipe(gulp.dest('./'));
}else if(contador == 1){
contador++;
function fcRenomeiaP(originalP) {
function fcMinifyP(varMinifyP) {
return varMinifyP
.pipe(gulp.dest('http/assets/js/'))
.pipe(jsnamo({preserveComments: 'all'}))
.pipe(dest('http/assets/js/', { basename : 'pluginsmin' }));
}
return fcMinifyP(originalP)
.pipe(rename("http/assets/js/plugins.min.js"));
}
var retornoPlugins = fcRenomeiaP(originalplugins)
.pipe(gulp.dest('./'));
}
}
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Os arquivos main.js e plugins.js foram minificados com êxito.',
icon: 'notifyicon.png',
sound: true,
wait: true
});
return mergeTask(retornoMain, retornoPlugins);
});
gulp.task('verificarErroJs', function() {
var jshintReporter = map(function (file, cb) {
if (!file.jshint.success) {
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Arquivo style.js possue erros, verificar apontamentos no terminal.',
icon: 'notifyicon.png',
sound: true
});
}else if(file.jshint.success) {
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Arquivo style.js não possue erros.',
icon: 'notifyicon.png',
sound: true
});
}
cb(null, file);
});
return gulp.src('src/js/style.js')
.pipe(jshint())
.pipe(jshintReporter)
.pipe(jshint.reporter('jshint-stylish'));
});
gulp.task('copiarJquery', function () {
return gulp.src(['bower_components/jquery/dist/jquery.js', 'bower_components/jquery/dist/jquery.min.js', 'bower_components/jquery/dist/jquery.min.map'])
.pipe(gulp.dest('http/assets/js/'))
.pipe(notify({ title: 'BlackCat - Notificação',
message: 'Arquivos jquery.js copiados com êxito para a pasta js do porjeto.',
icon: 'notifyicon.png',
sound: true }));
});
gulp.task('minificaImg', function(){
return gulp.src('http/assets/imgs/**/*')
.pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true})))
.pipe(gulp.dest('http/assets/imgs'))
.pipe(notify({
title: 'BlackCat - Notificação',
message: 'Imagens minificadas com êxito.',
icon: 'notifyicon.png',
sound: true,
wait: true
}));
});
gulp.task('deployProducao', function() {
rsync({
src: './http/',
dest: usuario + '@' + dominio + ':~/' + destinoProducao,
recursive: true,
exclude: ['.DS_Store'],
onStdout: function( data ) {
console.log(data.toString());
}
},function (error,stdout,stderr,cmd) {
if(error){
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Erro no deploy\n' + error.message,
icon: 'notifyicon.png',
sound: true
});
console.log('Erro no deploy\n' + error.message);
}else{
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Deploy efetuado com êxito.',
icon: 'notifyicon.png',
sound: true
});
}
}
);
});
gulp.task('deployHomologacao', function() {
rsync({
src: './http/',
dest: usuario + '@' + dominio + ':~/' + destinoHomologacao,
recursive: true,
exclude: ['.DS_Store'],
onStdout: function( data ) {
console.log(data.toString());
}
},function (error,stdout,stderr,cmd) {
if(error){
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Erro no deploy\n' + error.message,
icon: 'notifyicon.png',
sound: true
});
console.log('Erro no deploy\n' + error.message);
}else{
notifier.notify({
title: 'BlackCat - Notificação',
message: 'Deploy efetuado com êxito.',
icon: 'notifyicon.png',
sound: true
});
}
}
);
});