当使用grunt-contrib-watch时,grunt-autoprefixer无休止地循环

时间:2013-09-08 08:57:03

标签: gruntjs grunt-contrib-watch

我只是在学习 Grunt 。我将使用罗盘进行垂直节奏和图像精灵生成,使用autoprefixer为css3样式添加前缀。

这是我的 Gruntfile.js

module.exports = function(grunt) {
  var globalConfig = {
    sassDir: 'sass',
    cssDir: 'css'
  };

  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
  // Project configuration.
  grunt.initConfig({
    globalConfig: globalConfig,
    pkg: grunt.file.readJSON('package.json'),
    compass: {
      dev: {
        options: {
          sassDir: '<%= globalConfig.sassDir %>',
          cssDir: '<%= globalConfig.cssDir %>'
        }
      }
    },
    autoprefixer: {
      dev: {
        options: {
          browsers: ['last 2 versions']
        },
        src: '<%= globalConfig.cssDir %>/style.css',
        dest: '<%= globalConfig.cssDir %>/style.css'
      }
    },
    watch: {
      compass: {
        files: ['<%= globalConfig.sassDir %>/**/*.scss'],
        tasks: ['compass:dev'],
      },
      autoprefixer: {
        files: ['<%= globalConfig.cssDir %>/style.css'],
        tasks: ['autoprefixer:dev']
      },
      livereload: {
        options: { livereload: true },
        files: ['<%= globalConfig.cssDir %>/style.css']
      }
    }
  });

  // Default task(s) that will be run by invoking 'grunt' w/o args
  grunt.registerTask('styles:dev', ['compass', 'autoprefixer']);
  grunt.registerTask('default', ['styles:dev', 'watch']);
};

但每当我跑

grunt

除了grunt-contrib-watch无休止地调用grunt-autoprefixer之外,一切都按预期工作。

我刚开始学习 Grunt 。这可能是我的 Gruntfile.js

上的错误配置

我希望你能在这里帮助我。

1 个答案:

答案 0 :(得分:10)

将您的任务配置更改为:

watch: {
  compass: {
    files: ['<%= globalConfig.sassDir %>/**/*.scss'],
    tasks: ['compass:dev', 'autoprefixer:dev']
  },
  livereload: {
    options: { livereload: true },
    files: ['<%= globalConfig.cssDir %>/style.css']
  }
}

基本上,grunt-contrib-watch将在文件更新时运行任务,并且因为源文件和目标文件相同,所以它将其转换为无限循环。一旦您的指南针任务构建了您的CSS,只需运行自动修复。希望这可以帮助。 : - )