0
votes

My watch command executes all my tasks except for sass. When I execute grunt sass, I receive the following message error:

Warning: You need to have ruby and sass installed and in your path for this task to work.

I don't know why this message is showed because I can generate my .css file from the .scss through the Ruby console (sass --watch styles/scss/general.scss:styles/css/general.css), so I have both Ruby and sass installed.

My Gruntfile.js is the following:

module.exports = function(grunt) {

// 1. All configuration goes here 
grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    concat: {   
        dist: {
            src: [
                'js/libs/*.js', // All JS in the libs folder
            ],
            dest: 'js/build/production.js',
        }
    },

    uglify: {
        build: {
            src: 'js/build/production.js',
            dest: 'js/build/production.min.js'
        }
    },

    imagemin: {
        dynamic: {
            files: [{
                expand: true,
                cwd: 'images/',
                src: ['**/*.{png,jpg,gif}'],
                dest: 'images/optimized/'
            }]
        }
    },

    sass: {
        dist: {
            options: {
                style: 'compressed'
            },
            files: {
                'styles/css/general.css': 'styles/scss/general.scss'
            }
        } 
    },

    watch: {
        scripts: {
            files: ['**/*.{png,jpg,gif}', 'js/libs/*.js'],
            tasks: ['imagemin', 'concat', 'uglify'],
            options: {
                spawn: false,
            }
        },
        sass: {
            files: ['css/*.scss'],
            tasks: ['sass']
        }
    }

});

// 3. Where we tell Grunt we plan to use this plug-in.
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-compass');

// 4. Where we tell Grunt what to do when we type "grunt" into the terminal.
grunt.registerTask('default', ['concat', 'uglify', 'imagemin', 'watch', 'sass']);

};

My OS is Windows7. Any idea?

1

1 Answers

0
votes

Try

var config = {
    app: 'app',
    dist: 'dist'
};

grunt.initConfig({
 sass: {
        dist: {
          options: {
            style: 'compressed'
          },
          files: [{
            cwd: 'styles/scss/',
            src: '*.scss',
            dest: 'styles/css/',
            ext: '.css'
          }],
      },

 watch: { 
   sass: {
            files: ['styles/scss/{,*/}*.scss'],
            tasks: ['sass'],
            options: {
                livereload: true
            }
        }
 }
};

and would be better to place all the grunt.loadNpmTasks at the top before the grunt.initConfig