This is a question about how to use Compass with Grunt. Something goes wrong in the data filling step. I noticed on the console that, when I modify only a .scss file, compass fills up the same file several times (four, five or up to ten). In your opinion, what does it depend on? Here is my gruntfile.js. Thank you for your kind help.
module.exports = function (grunt) {
var _homeJs = ['contents/js/jquery.Cinema.js', 'contents/js/jquery.SkinOverlay.js'];
var _homeJsExclude = []
_homeJs.forEach(function (entry) {
_homeJsExclude.push('!' + entry)
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
dist: {
src: ['contents/js/*.js', _homeJsExclude],
dest: 'contents/dist/js/global.js'
},
lib: {
src: 'contents/plugins/**/*.js',
dest: 'contents/dist/js/libs.js'
},
globalhome: {
files: {
'contents/dist/js/global.home.js': _homeJs
}
}
},
uglify: {
dist: {
src: ['<%= concat.dist.dest %>'],
dest: 'contents/dist/js/global.min.js'
},
globalhome_min: {
src: 'contents/dist/js/global.home.js',
dest: 'contents/dist/js/global.home.min.js'
},
lib: {
src: ['<%= concat.lib.dest %>'],
dest: 'contents/dist/js/libs.min.js'
}
},
compass: {
dist: {
options: {
sassDir: 'contents/sass/',
cssDir: 'contents/dist/css',
watch: true,
outputStyle: 'compressed',
linecomments: false
}
}
},
cssmin: {
target: {
files: [
{
'./contents/dist/css/ie-css/ie8/ie8.min.css': ['./contents/css/ie-css/ie8/ie8.css']
},
{
'./contents/dist/css/main.min.css': ['./contents/dist/css/main.css']
},
{
'./contents/dist/css/responsive.min.css': ['./contents/dist/css/responsive.css']
}
]
}
},
concurrent: {
target: {
tasks: ['compass', 'watch'],
options: {
logConcurrentOutput: true
}
}
},
watch: {
js: {
files: ['contents/js/*.js', 'contents/plugins/**/*.js'],
tasks: ['concat', 'uglify:dist', 'uglify:globalhome_min'],
options: {
reload: true
}
},
css: {
files: ['contents/sass/**/*.scss', 'contents/dist/css/'],
tasks: ['concurrent:target'],
options: {
reload: true
}
}
},
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-concurrent');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.registerTask('default', ['concat', 'uglify', 'cssmin']);
};
You've got a couple problems here... First, you're
watching your sass files in thecompasstask already, there is no need to monitor them with an explicitwatchtask. Additionally, yourconcurrenttask is set to runwatchagain once the sass files change.This is the logic flow you have set up right now:
watch, it waits for sass OR compiled css files to changewatchexecutesconcurrent, which in turn executescompass, then another instance ofwatch.compasstask compiles your css, which causes thewatchtask to detect the changes and run theconcurrenttask again.So, instead of what you have now, just use this (simplified) config:
The you kick the whole thing off with:
Or if you want to run compass first, then watch for changes: