Недавно открыл для себя grunt и радости не было предела, пока не были прописаны все зависимости и не настроено всё под себя. Со всевозможными задачами в режиме watch время выполнения любой ~17 сек. Если оставить в Gruntfile только watch и компиляцию less в css ~3 сек.
Если возможно как-нибудь ускорить grunt, буду счастлив узнать об этом в виде вашего ответа, гневной ссылкой на документацию/форум/что угодно. Самому найти не получается(
Ноут конечно слабый у меня, но неужели grunt`у много надо?
Собственно ноут: win7, atom 1.5, 2gb ОЗУ
Gruntfile
module.exports = function(grunt) {
grunt.initConfig({
uglify: {
options: {
report: 'gzip',
compress: {
dead_code: true,
sequences: true,
evaluate: true,
booleans: true,
loops: true,
if_return: true,
join_vars: true
}
},
task: {
src: ['js/concat/concat.js'],
dest: 'js/min/min.js'
}
},
imagemin: {
options: {
optimizationLevel: 1,
pngquant: true,
progressive: false,
interlaced: false
},
dynamic: {
files: [{
expand: true,
cwd: 'imgs/simple/',
src: ['*.{png,jpg,gif}'],
dest: 'imgs/min/'
}]
}
},
sprite: {
all: {
src: ['imgs/forSprite/*.png'],
destImg: 'imgs/sprite/sprite.png',
destCSS: 'css/simple/sprite_positions.css',
imgPath: '../../imgs/sprite/sprite.png',
algorithm: 'binary-tree',
padding: 2,
engine: 'pngsmith',
cssFormat: 'css',
imgOpts: {
'format': 'png'
}
}
},
less: {
options: {
report: 'gzip',
sourseMap: true
},
dynamic: {
files: [{
expand: true,
cwd: 'css/less/',
src: ['*.less'],
dest: 'css/simple/',
ext: '.css',
}]
}
},
sass: {
options: {
style: 'expanded'
},
dynamic: {
files: [{
expand: true,
cwd: 'css/sass/',
src: ['*.scss'],
dest: 'css/simple/',
ext: '.css',
}]
}
},
autoprefixer: {
options: {
browsers: ['> 1%', 'last 2 versions', 'ff 24', 'opera 12.1', 'ie 8', 'ie 7']
},
task: {
src: ['css/concat/concat.css'],
dest: 'css/concat/concat.css'
}
},
cssmin: {
option: {
keepSpecialComments: 0,
report: 'gzip',
},
task: {
src: ['css/concat/concat.css'],
dest: 'css/min/min.css'
}
},
htmlmin: {
options: {
collapseBooleanAttributes: true,
removeRedundantAttributes: true,
collapseWhitespace: true,
removeComments: true
},
dynamic: {
files: [{
expand: true,
cwd: 'html/simple/',
src: ['*.html'],
dest: 'html/min/'
}]
}
},
replace: {
options: {
patterns: [
{
match: /\S*\.js.w*/,
replacement: 'src="../../js/min/min.js"',
expression: true
},
{
match: /\S*\.css.w*/,
replacement: 'href="../../css/min/min.css"',
expression: true
}
]
},
dynamic: {
files: [{
expand: true,
flatten: true,
src: ['html/simple/*.html'],
dest: 'html/simple/',
}]
}
},
concat: {
options: {
separator: ';',
},
js: {
src: ['js/libs/*.js', 'js/simple/*.js'],
dest: 'js/concat/concat.js'
},
css: {
src: ['css/libs/*.css', 'css/simple/*.css', '!css/simple/sprite_positions.css'],
dest: 'css/concat/concat.css'
}
},
watch: {
img: {
files: ['imgs/simple/*.{png,jpg,gif}'],
tasks: ['imagemin:dynamic'],
options: {
event: ['added', 'changed']
}
},
less: {
files: ['css/less/*.less'],
tasks: ['less:dynamic']
},
sass: {
files: ['css/sass/*.scss'],
tasks: ['sass:dynamic']
},
sprite: {
files: ['imgs/forSprite/*.{png,jpg,gif}'],
tasks: ['sprite:all'],
options: {
event: ['added']
}
},
concatjs: {
files: ['js/libs/*.js', 'js/simple/*.js'],
tasks: ['concat:js']
},
concatcss: {
files: ['css/libs/*.css', 'css/simple/*.css', '!css/simple/sprite_positions.css'],
tasks: ['concat:css']
},
autoprefixer: {
files: ['css/concat/concat.css'],
tasks: ['autoprefixer:task'],
options: {
event: ['added', 'changed']
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-spritesmith');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-autoprefixer');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-replace');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask(
'default', ['replace:dynamic', 'uglify:task', 'cssmin:task', 'htmlmin:dynamic']
);
};