/ Gists / gulpfile.js
On gists

gulpfile.js

JavaScript

gulpfile.js Raw #

var gulp = require('gulp');
var less = require('gulp-less');
var sourcemaps = require('gulp-sourcemaps');
var rename = require('gulp-rename');
var neon = require('neon-js');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var fs = require('fs');
var livereload = require('gulp-livereload');
var gulpFilter = require('gulp-filter');
var gulpif = require('gulp-if');
var autoprefixer = require('gulp-autoprefixer');
var runSequence = require('run-sequence');
var gzip = require('gulp-gzip');
var tar = require('gulp-tar');
var path = require('path');
var addsrc = require('gulp-add-src');
var shell = require('gulp-shell');

var options = {
	autoprefix: false,
	sourcemaps: true,
	compress: false
};

var files = ['app/**', 'temp/.*', 'vendor/**', 'www/**', 'www/webtemp/.*', 'composer.*', 'console', 'update',
	'!dist', '!www/vendor/**', '!app/config/config.local.neon', '!www/webtemp/css*', '!www/webtemp/js*', '!**/tests/**',
	'!www/images/**', 'www/images/.*',
	'!www/assets/**/*.less', '!www/dist/**/*.map', '!vendor/*/*/vendor/**', '!vendor/*/*/tests/**', '!vendor/*/*/Tests/**',
	'!vendor/videlalvaro/php-amqplib/PhpAmqpLib/Tests/**', '!vendor/symfony/*/*/*/*/Tests/**', '!vendor/**/composer.lock',
	'!vendor/*/*/docs/**'
];

var buildLess = function (module) {
	return gulp.src('www/assets/' + module + '/style/main.less')
		.pipe(gulpif(options.sourcemaps, sourcemaps.init()))
		.pipe(less({
			relativeUrls: true,
			compress: options.compress,
			rootpath: '/assets/' + module + '/style/'
		}))
		.pipe(rename(function (path) {
			path.basename = "style";
		}))
		.pipe(gulpif(options.sourcemaps, sourcemaps.write('./', {
			includeContent: true,
			sourceRoot: "/assets/" + module + "/style/"
		})))
		.pipe(gulpif(options.autoprefix, autoprefixer({cascade: false})))
		.pipe(gulp.dest('./www/dist/' + module))
		.pipe(gulpFilter(['*.css']))
		.pipe(livereload());
};

gulp.task('less:front', function () {
	return buildLess('front');
});
gulp.task('less:admin', function () {
	return buildLess('admin');
});

gulp.task('less', ['less:front', 'less:admin']);

var buildJs = function (module) {
	var content = fs.readFileSync("./www/assets/" + module + "/js.neon", 'utf8');
	var data = neon.decode(content);

	return gulp.src(data.values(), {base: 'www/'})
		.pipe(sourcemaps.init())
		.pipe(uglify({compress: options.compress, mangle: options.compress}))
		.pipe(concat("output.js"))
		.pipe(sourcemaps.write('./', {
			sourceRoot: "/"
		}))
		.pipe(gulp.dest('www/dist/' + module))
		.pipe(livereload());

};

gulp.task('js:admin', function () {
	return buildJs('admin');
});
gulp.task('js:front', function () {
	return buildJs('front');
});

gulp.task('js', ['js:front', 'js:admin']);

gulp.task('watch', function () {
	livereload.listen();

	gulp.watch('www/assets/front/**/*.less', ['less:front']);
	gulp.watch(['www/**/*.less', '!www/assets/front/**/*'], ['less']);
	gulp.watch(['www/assets/front/**/*.js'], ['js:front']);
	gulp.watch(['www/**/*.js', '!www/dist/**/*.js', '!www/webtemp/**/*.js', '!www/assets/front/**/*'], ['uglify']);
});


gulp.task('compress', function () {
	return gulp.src(files, {base: '.'})
		.pipe(addsrc('www/vendor/font-awesome/fonts/**', {base: '.'}))
		.pipe(tar('update.tar'))
		.pipe(gzip())
		.pipe(gulp.dest('./dist'));
});

gulp.task('optimize', function () {
	return gulp.src(['composer.json'])
		.pipe(shell('composer dump-autoload -o'));
});

gulp.task('build', function () {
	options.compress = true;
	options.autoprefix = true;
	options.sourcemaps = false;
	runSequence(
		['js', 'less', 'optimize'],
		'compress'
	);
});