我已经设置了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上可能存在一些性能问题。
答案 0 :(得分:0)
这里的问题相同,在更改并执行任务后,所有模块都重新加载。
但我在github上找到了一个非常好的解决方案 (https://github.com/steida/grunt-este-watch)
由于历史原因,它使用fs.fileWatch和fs.watch组合,因此速度慢而且有问题。从节点0.9.2+开始,fs.watch就可以了。
安装grunt-este-watch
npm install grunt-este-watch --save-dev
更改contrib watch
grunt.loadNpmTasks('grunt-contrib-watch');
este watch
grunt.loadNpmTasks('grunt-este-watch');
更改任务
watch: {
javascript: {
files: 'src/js/**/*',
tasks: ['uglify']
}
}
到
esteWatch: {
options: {
dirs: ['../src/**/*']
},
'js': function(filepath) { return 'uglify' }
}