Passed configuration to gulp, due to grunt limitations

This commit is contained in:
Stéphane Goetz 2015-07-21 22:37:29 +02:00
parent 0298b7bf91
commit 046a419c31
3 changed files with 182 additions and 38 deletions

View File

@ -2,8 +2,6 @@ module.exports = function (grunt) {
'use strict'; 'use strict';
grunt.loadNpmTasks('grunt-php'); grunt.loadNpmTasks('grunt-php');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.initConfig({ grunt.initConfig({
php: { php: {
@ -15,32 +13,8 @@ module.exports = function (grunt) {
router: "index.php" router: "index.php"
} }
} }
},
less: {
development: {
options: {
cleancss: true,
report: 'min'
},
files: {
"resources/themes/daux-blue/css/theme.min.css": "resources/themes/daux-blue/less/theme.less",
"resources/themes/daux-green/css/theme.min.css": "resources/themes/daux-green/less/theme.less",
"resources/themes/daux-navy/css/theme.min.css": "resources/themes/daux-navy/less/theme.less",
"resources/themes/daux-red/css/theme.min.css": "resources/themes/daux-red/less/theme.less"
} }
}
},
watch: {
scripts: {
files: ['templates/default/theme/**/*.less'],
tasks: ['less'],
options: {
nospawn: true
},
},
},
}); });
//grunt.registerTask('default', ['less', 'watch']);
grunt.registerTask('default', ['php']); grunt.registerTask('default', ['php']);
}; };

167
gulpfile.js Normal file
View File

@ -0,0 +1,167 @@
var gulp = require('gulp'),
php = require('gulp-connect-php'),
less = require('gulp-less'),
rename = require('gulp-rename'),
plumber = require('gulp-plumber'),
postcss = require('gulp-postcss');
var resources = {
daux_blue:{source: "resources/themes/daux-blue/less/theme.less", dest: "resources/themes/daux-blue/css/"},
daux_green:{source: "resources/themes/daux-green/less/theme.less", dest: "resources/themes/daux-green/css/"},
daux_navy:{source: "resources/themes/daux-navy/less/theme.less", dest: "resources/themes/daux-navy/css/"},
daux_red:{source: "resources/themes/daux-red/less/theme.less", dest: "resources/themes/daux-red/css/"}
};
var unusedRules = [
//We only use one glyphicon ...
".glyphicon-",
"!.glyphicon-chevron-right",
//we dont need all buttons
".btn-",
"!.btn-primary",
"!.btn-secondary",
"!.btn-hero",
"!.btn-sidebar",
".caret",
//Typography
".h1",
".h2",
".h3",
".h4",
".h5",
".h6",
".small",
// We need only small columns
".col-",
"!.col-sm",
// We don't use a lot of navs and navbars
".navbar-fixed",
".navbar-inverse",
".navbar-default",
".nav-pills",
".nav-tabs",
".nav-stacked",
".nav-justified",
// And a few others we don't use
".bg-",
".table"
];
function prepare_rules(rules) {
var regexes = {inclusion: [], exclusion: []}, rule, pattern, regex, exclusion;
for (rule in rules) {
if (!rules.hasOwnProperty(rule)) continue;
pattern = rules[rule];
exclusion = pattern.indexOf('!') === 0;
if (exclusion) { pattern = pattern.slice(1); }
regex = pattern.replace('.', '\\.').replace('*', '(.*)');
if (exclusion) {
regexes.exclusion.push(new RegExp(regex));
} else {
regexes.inclusion.push(new RegExp(regex));
}
}
return regexes;
}
function processPatterns(patterns, string) {
var i;
for (i in patterns.exclusion) {
if (!patterns.exclusion.hasOwnProperty(i)) continue;
if (string.match(patterns.exclusion[i])) return false;
}
for (i in patterns.inclusion) {
if (!patterns.inclusion.hasOwnProperty(i)) continue;
if (string.match(patterns.inclusion[i])) return true;
}
}
function removeUnusedRules(rules) {
var regexes = prepare_rules(rules);
return function(css) {
css.eachRule(function (rule) {
var removedSome = false,
selectors = rule.selectors,
i;
for (i = 0; i < selectors.length; i++) {
if (processPatterns(regexes, selectors[i])) {
selectors.splice(i, 1);
i--;
removedSome = true;
}
}
if(removedSome) {
if (selectors.length == 0) {
rule.removeSelf();
} else {
rule.selectors = selectors;
}
}
});
return css;
}
}
function createTask(source, dest) {
return function() {
return gulp.src(source)
.pipe(less())
.pipe(postcss([
removeUnusedRules(unusedRules),
require('csswring')({
preserveHacks: true
})
]))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest(dest));
}
}
var style_tasks = [];
for (var style in resources) {
gulp.task('style_' + style, createTask(resources[style].source, resources[style].dest));
style_tasks.push('style_' + style);
}
gulp.task("styles", style_tasks);
gulp.task('watch', function() {
// Watch .less files
gulp.watch('resources/themes/**/*.less', ['styles']);
});
gulp.task('php', function() {
php.server({
keepalive: true,
open: true,
port: 8085,
router: "index.php"
});
});
gulp.task('default', ['php']);

View File

@ -2,12 +2,15 @@
"name": "daux.io", "name": "daux.io",
"version": "0.1.1", "version": "0.1.1",
"private": true, "private": true,
"dependencies": { "devDependencies": {
"grunt": "~0.4.1", "grunt": "~0.4.1",
"grunt-php": "~0.3.0", "grunt-php": "~0.3.0",
"grunt-contrib-less": "~0.9.0" "csswring": "^3.0.5",
}, "gulp": "^3.9.0",
"devDependencies": { "gulp-connect-php": "0.0.5",
"grunt-contrib-watch": "~0.5.0" "gulp-less": "^3.0.3",
"gulp-plumber": "^1.0.1",
"gulp-postcss": "^5.1.10",
"gulp-rename": "^1.2.2"
} }
} }