我尝试在node.js中通过grunt运行监视任务,但它对我不起作用(这是我得到的结果):
$ grunt watch
warning: Maximum call stack size exceeded Use --force to continue.这是Gruntfile.js中监视任务的一部分:
watch: {
less: {
files: 'src/less/*.less',
tasks: ['clean', 'recess', 'copy']
},
js: {
files: 'src/js/*.js',
tasks: ['clean', 'jshint', 'concat', 'uglify', 'copy']
},
theme: {
files: 'src/theme/**',
tasks: ['clean', 'recess', 'copy']
},
images: {
files: 'src/images/*',
tasks: ['clean', 'recess', 'copy']
}
}
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('watch', ['watch']);发布于 2013-10-05 19:58:58
u_mulder是正确的;只需从代码中删除不必要的grunt.registerTask('watch', ['watch'])行,就可以了。
编辑:发生这种情况是因为您正在注册一个调用自身的新任务。添加像grunt.registerTask('watch', ['watch']);这样的行是没有意义的,因为已经为您定义了它。如果不是这样,您将不得不为Gruntfile配置中的每个任务调用grunt.registerTask。
在某些情况下,使用不同的名称为任务指定别名可能是有意义的。它将使用与您指定的完全相同的配置来调用,但是为它设置别名可以省去输入。例如,我喜欢用‘available tasks plugin’别名注册我的任务,所以我可以输入grunt tasks而不是grunt availabletasks,这样就省去了一些输入。在本例中,您可以执行以下操作:
grunt.registerTask('w', ['watch']);然后,您可以使用grunt w作为grunt watch的快捷方式。
发布于 2014-02-28 18:33:55
实际上,删除grunt.registerTask('watch', ['watch'])会解决你的问题。但让我来帮你理解一下幕后发生的事情。
对于grunt.registerTask('watch', ['watch']),watch正在调用自己,这会生成无限循环。当你删除它时,它仍然有效,因为watch是包的默认任务,我猜它是在用grunt.loadNpmTasks('grunt-contrib-watch');乞求你的文件时调用的。您可以在here文档上更进一步
但是,让您定制的监视任务按您希望的方式工作将会非常方便。要实现这一点,最好做一些像grunt.registerTask('watchfiles', ['watch'])这样的事情。这样,您就避免了无限循环,并使您的自定义工作。
你可以像这样运行这个$ grunt watchfiles任务,它会运行的很好。
注意,所有的路径都必须是正确的,否则,如果任务指定了错误的路径,它将不会运行。
https://stackoverflow.com/questions/19197303
复制相似问题