openstamanager/gulpfile.js

315 lines
9.1 KiB
JavaScript

// Librerie NPM richieste per l'esecuzione
var gulp = require('gulp');
var del = require('del');
var debug = require('gulp-debug');
var util = require('gulp-util');
var shell = require('shelljs');
var mainBowerFiles = require('main-bower-files');
var gulpIf = require('gulp-if');
// Minificatori
var minifyJS = require('gulp-uglify');
var minifyCSS = require('gulp-clean-css');
var minifyJSON = require('gulp-json-minify');
// Interpretatori CSS
var sass = require('gulp-sass');
var less = require('gulp-less');
var stylus = require('gulp-stylus');
var autoprefixer = require('gulp-autoprefixer');
// Concatenatore
var concat = require('gulp-concat');
// Altro
var flatten = require('gulp-flatten');
var rename = require('gulp-rename');
// Configurazione
var config = {
production: 'assets/dist', // Cartella di destinazione
development: 'assets/src', // Cartella dei file di personalizzazione
debug: false,
main: {
bowerDirectory: './node_modules',
bowerJson: './package.json',
},
paths: {
js: 'js',
css: 'css',
images: 'img',
fonts: 'fonts'
}
};
// Elaborazione e minificazione di JS
gulp.task('JS', function () {
gulp.src(mainBowerFiles('**/*.js', {
paths: config.main,
debugging: config.debug,
}))
.pipe(concat('app.min.js'))
.pipe(minifyJS())
.pipe(gulp.dest(config.production + '/' + config.paths.js));
gulp.start('srcJS');
});
// Elaborazione e minificazione di JS personalizzati
gulp.task('srcJS', function () {
gulp.src([
config.development + '/' + config.paths.js + '/*.js',
])
.pipe(concat('custom.min.js'))
.pipe(minifyJS())
.pipe(gulp.dest(config.production + '/' + config.paths.js));
});
// Elaborazione e minificazione di CSS
gulp.task('CSS', function () {
gulp.src(mainBowerFiles('**/*.{css,scss,less,styl}', {
paths: config.main,
debugging: config.debug,
}))
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
.pipe(autoprefixer({
browsers: 'last 2 version',
}))
.pipe(minifyCSS({
rebase: false,
}))
.pipe(concat('app.min.css'))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.css));
gulp.start('srcCSS');
});
// Elaborazione e minificazione di CSS personalizzati
gulp.task('srcCSS', function () {
gulp.src([
config.development + '/' + config.paths.css + '/*.{css,scss,less,styl}',
])
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
.pipe(autoprefixer({
browsers: 'last 2 version',
}))
.pipe(minifyCSS({
rebase: false,
}))
.pipe(concat('style.min.css'))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.css));
gulp.src([
config.development + '/' + config.paths.css + '/print/*.{css,scss,less,styl}',
config.bowerDirectory + '/fullcalendar/fullcalendar.print.css',
])
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
.pipe(autoprefixer({
browsers: 'last 2 version',
}))
.pipe(minifyCSS({
rebase: false,
}))
.pipe(concat('print.min.css'))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.css));
gulp.src([
config.development + '/' + config.paths.css + '/themes/*.{css,scss,less,styl}',
config.main.bowerDirectory + '/adminlte/dist/css/skins/_all-skins.css',
])
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
.pipe(autoprefixer({
browsers: 'last 2 version',
}))
.pipe(minifyCSS({
rebase: false,
}))
.pipe(concat('themes.min.css'))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.css));
});
// Elaborazione delle immagini
gulp.task('images', function () {
gulp.src(mainBowerFiles('**/*.{jpg,png,jpeg,gif}', {
paths: config.main,
debugging: config.debug,
}))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.images));
gulp.start('srcImages');
});
// Elaborazione delle immagini personalizzate
gulp.task('srcImages', function () {
gulp.src([
config.development + '/' + config.paths.images + '/**/*.{jpg,png,jpeg,gif}',
])
.pipe(gulp.dest(config.production + '/' + config.paths.images));
});
// Elaborazione dei fonts
gulp.task('fonts', function () {
gulp.src(mainBowerFiles('**/*.{otf,eot,svg,ttf,woff,woff2}', {
paths: config.main,
debugging: config.debug,
}))
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.fonts));
gulp.start('srcFonts');
});
// Elaborazione dei fonts personalizzati
gulp.task('srcFonts', function () {
gulp.src([
config.development + '/' + config.paths.fonts + '/**/*.{otf,eot,svg,ttf,woff,woff2}',
])
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.fonts));
});
gulp.task('ckeditor', function () {
gulp.src([
config.main.bowerDirectory + '/ckeditor/{adapters,lang,skins}/**/*',
])
.pipe(gulp.dest(config.production + '/' + config.paths.js));
gulp.src([
config.main.bowerDirectory + '/ckeditor/{ckeditor,styles}.js',
])
.pipe(gulp.dest(config.production + '/' + config.paths.js));
});
gulp.task('colorpicker', function () {
gulp.src([
config.main.bowerDirectory + '/bootstrap-colorpicker/dist/**/*.{jpg,png,jpeg}',
])
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.images + '/bootstrap-colorpicker'));
});
gulp.task('chartjs', function () {
gulp.src([
config.main.bowerDirectory + '/chart.js/dist/Chart.min.js',
])
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.js + '/chartjs'));
});
// Elaborazione e minificazione delle informazioni sull'internazionalizzazione
gulp.task('i18n', function () {
gulp.src([
config.main.bowerDirectory + '/**/{i18n,lang,locale,locales}/*.{js,json}',
config.development + '/' + config.paths.js + '/i18n/**/*.{js,json}',
'!' + config.main.bowerDirectory + '/**/{src,plugins}/**',
'!' + config.main.bowerDirectory + '/ckeditor/**',
'!' + config.main.bowerDirectory + '/jquery-ui/**',
])
.pipe(gulpIf('*.js', minifyJS(), gulpIf('*.json', minifyJSON())))
.pipe(gulpIf('!*.min.*', rename({
suffix: '.min'
})))
.pipe(flatten({
includeParents: 1
}))
.pipe(gulp.dest(config.production + '/' + config.paths.js + '/i18n'));
});
// PHP DebugBar assets
gulp.task('php-debugbar', function () {
gulp.src([
'./vendor/maximebf/debugbar/src/DebugBar/Resources/**/*',
])
.pipe(gulpIf('*.css', minifyCSS(), gulpIf('*.js', minifyJS())))
.pipe(gulp.dest(config.production + '/php-debugbar'));
});
// Operazioni per la release
gulp.task('release', function () {
var archiver = require('archiver');
var fs = require('fs');
shell.exec('git rev-parse --short HEAD > REVISION');
del([
'./vendor/tecnickcom/tcpdf/fonts/*',
'!./vendor/tecnickcom/tcpdf/fonts/*helvetica*',
'./vendor/mpdf/mpdf/iccprofiles/*',
'./vendor/mpdf/mpdf/qrcode/*',
'./vendor/mpdf/mpdf/ttfonts/*',
]);
var output = fs.createWriteStream('./release.zip');
var archive = archiver('zip');
output.on('close', function () {
console.log('ZIP completato!');
});
archive.on('error', function (err) {
throw err;
});
archive.pipe(output);
archive.glob('**/*', {
dot: true,
ignore: [
'.git/**',
'node_modules/**',
'backup/**',
'files/**',
'logs/**',
'config.inc.php',
'*.lock',
'*.phar',
'**/*.log',
'**/*.zip',
'**/*.bak',
'**/~*',
]
});
archive.file('backup/.htaccess');
archive.file('files/.htaccess');
archive.file('files/my_impianti/componente.ini');
archive.file('logs/.htaccess');
archive.finalize();
});
// Pulizia
gulp.task('clean', function () {
return del([config.production]);
});
// Operazioni di default per la generazione degli assets
gulp.task('bower', ['clean'], function () {
gulp.start('JS');
gulp.start('CSS');
gulp.start('images');
gulp.start('fonts');
gulp.start('other');
});
// Operazioni particolari per la generazione degli assets
gulp.task('other', ['clean'], function () {
gulp.start('ckeditor');
gulp.start('colorpicker');
gulp.start('chartjs');
gulp.start('i18n');
gulp.start('php-debugbar');
});
gulp.task('default', ['clean', 'bower']);