gruntjsgrunt-contrib-watchgrunt-contrib-sass

Grunt: convert sass to css after file changes (watch)


so this is my gruntfile.js:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    folders: {
       'dist': 'dist',
       'app': 'app'
    },

// configure jshint to validate js files -----------------------------------
jshint: {
  options: {
    reporter: require('jshint-stylish'),
    ignores: [
    'Grunfile.js',
    'app/assets/lib/**/*'
    ]
  },
  all: [
  'app/**/**/*.js',
  ]
},

// configure uglify to minify js files -------------------------------------
uglify: {
  options: {
    banner: '/*\n <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> \n*/\n'
  },
  build: {
    files: {
      'dist/js/app.min.js': 'app/js/main.js'
    }
  }
},

// compile sass stylesheets to css -----------------------------------------
sass: {
  dist: {
    options: {
      style: 'expanded'
    },
    files: {
      'app/assets/css/main.css': 'app/assets/sass/main.sass',
      'app/assets/css/variables.css': 'app/assets/sass/variables.sass',
      'app/assets/css/typography.css': 'app/assets/sass/typography.sass',
      'app/assets/css/reset.css': 'app/assets/sass/reset.sass'
    }
  }
},

// starting an express server ----------------------------------------------
express: {
  dev: {
    options: {
      port: 9000,
      hostname: '0.0.0.0',
      bases: ['app'],
      livereload: true
    }
  }
},

// configure watch to auto update ------------------------------------------
watch: {
  sass: {
    files: ['**/*.{scss,sass}'],
    tasks: ['sass'],
    options: {
      livereload: true
    }
  },
  reload: {
    options: {
      livereload: true
    },
    files: ['app/**/*'],
  },
}

  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-express');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', ['jshint', 'uglify', 'sass', 'express', 'watch:reload']);

};

My problem: When I start grunt, it checks for my sass files and automatically convert it to css files. Check. But if i start grunt and then edit a sass file, it recognizes the changes but dont convert the sass to css after it again. Does anybody see the mistake?

Cheers!


Solution

  • Found the "problem": Had to register the task 'watch' instead of 'watch:reload'!

    Cheers