【问题标题】:Grunt watch tasks seem to take a very long timeGrunt watch 任务似乎需要很长时间
【发布时间】:2013-11-21 12:44:55
【问题描述】:

我正在运行两个运行时间小于 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) 上运行

【问题讨论】:

  • 对于 sass 任务,你使用的是 grunt-contrib-sass 吗?
  • @Ben 不,我正在使用 grunt-sass(用 Node 而不是 Ruby 编写)。
  • @Daveyjoe 你解决问题了吗?我刚从 Ruby 切换到 Grunt,我没有看到任何编译改进。使用 grunt-sass。
  • @TheFrost:我一直遇到 Grunt 的性能问题,所以我切换到 Gulp。对现在的表现更满意。

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


【解决方案1】:

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

详细看问题:

grunt tasknamewatch --verbose

我已经尝试对监视任务进行递归,但没有成功。

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

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

【讨论】:

    【解决方案2】:

    是的,contrib-sass 慢很多,认为这可能是导致问题的原因。我唯一能建议的就是尽量减少你正在运行的监视目标的数量;看起来您正在将 css 从 app 复制到 tmp 然后重新加载?使用类似sass:dev 的任务将您的 sass 直接保存到 tmp 可能会更好,这样您只需运行两次 watch。这就是我通常的做法:

    watch: {
        sass: {
            files: [
                'styles/**/*.scss'
            ],
            tasks: ['sass', 'copy:dev', 'cssmin']
        },
    
        css: {
            options: {
                livereload: true
            },
            files: [
                'dist/css/master.css'
            ],
            tasks: []
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2013-09-07
      • 2020-08-26
      • 2014-10-09
      • 2012-11-26
      相关资源
      最近更新 更多