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'
);
});