2013-10-05 5 views
9

Я попытался запустить задачу смотреть на ворчание в 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']); 
+1

Я думаю, что это поможет http://stackoverflow.com/questions/17033246/grunt-uglifym-call-stack-size-exceeded –

ответ

24

u_mulder правильно; просто удалите ненужную строку grunt.registerTask('watch', ['watch']) из вашего кода, и вам должно быть хорошо идти.

Редактировать: Это происходит потому, что вы регистрируете новую задачу, которая вызывает себя. Добавление строки типа grunt.registerTask('watch', ['watch']); не имеет смысла, поскольку оно уже определено для вас. Если это не так, вам нужно будет позвонить grunt.registerTask для каждой задачи в вашей конфигурации Gruntfile.

В некоторых случаях может возникнуть смысл для псевдонима задачи с другим именем. Он будет вызываться с той же конфигурацией, которую вы указали, но наложение может сохранить печать. Например, мне нравится регистрировать мой available tasks plugin с псевдонимом «tasks», поэтому вместо ввода grunt availabletasks я могу ввести grunt tasks и это сэкономит мне некоторую типизацию. В этом случае вы могли бы сделать что-то вроде:

grunt.registerTask('w', ['watch']); 

И тогда вы можете использовать grunt w в качестве ярлыка для grunt watch.

+0

Это работа спасибо :) – elkebirmed

2

Актуальным об этом заказе: grunt.registerTask('watch', ['watch']). Но позвольте мне помочь вам понять, что происходит под капотом.

С вызовом grunt.registerTask('watch', ['watch']), watch, который генерирует бесконечный цикл. Когда вы удаляете его, он все равно работает, потому что watch является задачей по умолчанию для пакета, которая, как мне кажется, вызывается в самом начале вашего файла с grunt.loadNpmTasks('grunt-contrib-watch');. Вы можете пойти дальше на doc here

Однако было бы очень удобно, чтобы ваша настройка задачи наблюдения работала так, как вы этого хотите. Чтобы это произошло, было бы, вероятно, лучше сделать что-то вроде grunt.registerTask('watchfiles', ['watch']). С этим вы избегаете бесконечного цикла и делаете свою работу по настройке.

И вы должны выполнить задачу, подобную этой $ grunt watchfiles, и она будет работать хорошо.

Обратите внимание, что все пути должны быть правильными, иначе, если задана неверная траектория, она просто не будет запущена.

+0

Бен, пожалуйста, воспроизведите шаги, а затем мы можем чат. Вопрос, заданный здесь, не является теоретическим, это то, что блокирует этот разработчик при выполнении своей задачи. , так как это практично, нужно решать «практически» Ваш комментарий не поможет дать ясность в проблеме. , и если вы воспроизведете ошибку, вы получите бесконечный цикл. Тогда, даже если я ошибаюсь, это не имеет особого значения, потому что вы дадите нам больше ясности в отношении этой «тьмы». Спасибо! – jgtoriginal

+0

Спасибо, я обновил свой ответ. – Ben

Смежные вопросы