Grunt手表任务似乎需要很长时间

时间:2013-11-21 12:44:55

标签: node.js gruntjs yeoman grunt-contrib-watch

我正在运行两个简单的任务,每个任务运行时间<100毫秒,但是当在watch命令下运行时,两个组合任务总共需要大约8秒(每个任务的开销似乎为3.5秒)。我正在使用它进行实时重载以进行开发,我发现它非常令人沮丧。我尝试将spawn设置为false,但这似乎打破了它并且没有任何关联任务被运行。

以下是更改sass文件时的示例输出。

>> File "app/styles/main.scss" changed.

File "app/styles/main.css" created.

Done, without errors.

Elapsed time
loading tasks   4ms  ▇▇▇▇▇ 9%
sass            1ms  ▇▇ 2%
sass:dist      39ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 89%
Total 44ms
Completed in 3.862s at Mon Nov 18 2013 17:05:57 GMT+0000 (GMT) - Waiting...
OK
>> File "app/styles/main.css" changed.

Running "copy:styles" (copy) task
Copied 1 files

Done, without errors.

Elapsed time
loading tasks   4ms  ▇▇▇▇▇▇▇▇▇▇▇▇ 24%
copy:styles    13ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 76%
Total 17ms
Completed in 3.704s at Mon Nov 18 2013 17:06:01 GMT+0000 (GMT) - Waiting...
OK
>> File ".tmp/styles/main.css" changed.

... Reload .tmp/styles/main.css ...
... Reload .tmp/styles/main.css ...
Completed in 0.000s at Mon Nov 18 2013 17:06:01 GMT+0000 (GMT) - Waiting...

在node.js 0.10.20上使用grunt 0.4.1(和grunt-cli 0.1.11)。在2012 Macbook Air(OS X 10.8.5)上运行

2 个答案:

答案 0 :(得分:2)

更改文件后,请注意执行任务,但完成后,请重新加载模块(!)并再次观看。

详细看到问题:

grunt tasknamewatch --verbose

我已经尝试过关于监视任务的递归,但没有成功。

watch: {
    ...,
    tasks: ['sometask', 'watch']
}

一个运行良好的简单解决方案是使用“grunt-este-watch”。您可以在此处阅读所需的步骤:https://stackoverflow.com/a/33920834/2741005

答案 1 :(得分:0)

是的,contrib-sass慢得多,认为可能导致了这个问题。我唯一能建议的是尽可能减少你正在运行的监视目标的数量;看起来你正在将app的css复制到tmp然后重新加载?可能更好地将你的sass直接保存到tmp sass:dev任务,就像你只运行两次。这就是我通常这样做的方式:

watch: {
    sass: {
        files: [
            'styles/**/*.scss'
        ],
        tasks: ['sass', 'copy:dev', 'cssmin']
    },

    css: {
        options: {
            livereload: true
        },
        files: [
            'dist/css/master.css'
        ],
        tasks: []
    }
}

我不禁认为这是在完全不同的目标中运行副本的额外开销,当然你可以在该任务数组中运行任意数量的任务。 :)