即使使用spawn = false,grunt-contrib-watch也会变慢

时间:2015-06-04 11:54:38

标签: gruntjs grunt-contrib-watch

我已经设置了grunt-contrib-watch任务,将文件列表复制到" dist"每次我保存" src"的一个文件的目录目录。不幸的是,完成此任务需要7到9秒。

我听说过"spawn" option for grunt-contrib-watch。使用load-grunt-tasks从单独的JSON文件加载每个任务的配置,我改变了我的watch.json,使它看起来像这样:

{
    "service": {
        "files": [
            "src/*.php"
        ],
        "tasks": [
            "copy:service"
        ],
        "options": {
            "spawn": "false",
            "livereload": "true"
        }
    }
}

...但是将其设置为false并不会改变任何内容:它仍然需要7到9秒才能运行。我安装了time-grunt来监控任务时间,这是保存文件时的结果:

保存文件时,我得到以下输出:

Waiting...
>> File "src\myfile.php" changed.

Running "copy:service" (copy) task
Created 7 directories, copied 120 files

Done, without errors.


Execution Time (2015-06-04 11:38:23 UTC)
loading tasks  333ms  ██████████████████ 40%
copy:service   490ms  ██████████████████████████ 60%
Total 823ms

Completed in 7.105s at Thu Jun 04 2015 13:38:24 GMT+0200 (W. Europe Daylight Time)

所以看起来这个任务本身花了不到一秒钟,这意味着Grunt本身需要6秒才能加载?这似乎很高。我在Windows 7上,我听说在Windows上可能存在一些性能问题。

1 个答案:

答案 0 :(得分:0)

这里的问题相同,在更改并执行任务后,所有模块都重新加载。

但我在github上找到了一个非常好的解决方案 (https://github.com/steida/grunt-este-watch

官方grunt-contrib-watch出了什么问题?

由于历史原因,它使用fs.fileWatch和fs.watch组合,因此速度慢而且有问题。从节点0.9.2+开始,fs.watch就可以了。

怎么办?

  1. 安装grunt-este-watch

    npm install grunt-este-watch --save-dev
    
  2. 更改contrib watch

    grunt.loadNpmTasks('grunt-contrib-watch');
    

    este watch

    grunt.loadNpmTasks('grunt-este-watch');
    
  3. 更改任务

    watch: {
      javascript: {
          files: 'src/js/**/*',
          tasks: ['uglify']
      }
    }
    

    esteWatch: {
       options: {
          dirs: ['../src/**/*']
       },
       'js': function(filepath) { return 'uglify' }
    }