Grunt任务在我的控制台中生成一个循环

时间:2015-08-11 21:40:44

标签: javascript gruntjs grunt-contrib-watch grunt-contrib-uglify gruntfile

我使用任务uglify,cssmin和其他grunt任务。

例如,如果我只更改了我的javascript或css文件......控制台会向我显示一个大约十次的循环: enter image description here

...... ETC

所有的变化和任务都很完美,但这个奇怪的循环非常奇怪。

这是我的Gruntfile.js:

    //Gruntfile.js
    module.exports = function (grunt) {
    grunt.initConfig({

    // Watch task config
    watch: {
      sass: {
        files: "scss/*.scss",
        tasks: ['sass']
      },
      cssmin: {
        files: "css/*.css",
        tasks: ['cssmin']
      },
      uglify: {
        files: "js/*.js",
        tasks: ['uglify']
      }
    },

    // Sass task config
    sass: {
        dev: {
            files: {
                // fichero destino  // fichero .scss
                "css/custom.css" : "scss/custom.scss"
            }
        }
    },

    // BrowserSync task config
    browserSync: {
      default_options: {
        bsFiles: {
          src: [
            "css/*.css",
            "js/*.js",
            "*.html"
          ]
        },
        options: {
          watchTask: true,
          proxy: "tutorialmaterialize.dev"
          }
        }
      },

    // UnCSS task config  
    uncss: {
        dist: {
            options: {
               //Estilos que queremos limpiar
               stylesheets : ['css/materialize.min.css'],

               //Estilos que no queremos limpiar
               ignoreSheets: [/custom.css/], 
            },
            files: {
                    //Archivo css de salida    //Scanea las clases, ids, etc de este html
                    'css/materialize.min.css': ['index.html']
            }
        }
    },

    // Cssmin task config
    cssmin: {
      options: {
        shorthandCompacting: false,
        roundingPrecision: -1
      },
      target: {
        files: {//Fichero combinado   //Ficheros que vamos a combinar, 2 .css
                'css/allcss.min.css': ['css/custom.css', 'css/materialize.min.css']
        }
      }
    },

    //Uglify task config  
    uglify: {
      build: {
        src: 'js/custom.js',//Ruta de fichero de entrada
        dest: 'js/custom.min.js'//Ruta del fichero minificado
      }
    }

  });

  //Cargamos los grunt plugins
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-browser-sync');
  grunt.loadNpmTasks('grunt-uncss');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-uglify');

 //Default task
 grunt.registerTask('default', ['browserSync', 'watch']);
};

我该如何解决这个问题?谢谢你。

2 个答案:

答案 0 :(得分:3)

似乎正在监视uglify输出的文件是否有变化,再次触发uglify,等等......

请注意,watch配置为监视目录js中的每个文件,uglify配置为将结果输出到js/custom.min.js

更改其中一个,循环将停止。

例如(取决于您正在使用的手表插件),您可以使用数组和watch语法更改!的配置以查看目录,不包括此单个文件,像这样:

watch: {
  uglify: {
    files: ["js/*.js", "!js/custom.min.js"],
    tasks: ['uglify']
  }
},

答案 1 :(得分:2)

尝试添加'!js / custom.min.js'到手表的文件。看起来您正在关注该文件的更改,该更改会触发任务再次运行

  uglify: {
    files: ["js/*.js","!js/custom.min.js"],
    tasks: ['uglify']
  }