我正在尝试使用grunt-contrib-watch和grunt-rsync将任何文件更改上传到我的开发服务器。以下是我的设置:
var path = require('path');
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
...
watch: {
upload: {
files: ['*'],
},
...
},
rsync: {
options: {
args: ['--verbose'],
exclude: ['.*','node_modules','sql','artifacts','session','logs','cache'],
recursive: true,
syncDestIgnoreExcl: true
},
dev: {
options: {
src: './',
dest: '/usr/local/project',
host: 'dev3',
}
}
},
});
grunt.event.on('watch', function(action, filepath, target) {
if(target!=='upload') return;
grunt.config('rsync.dev.options.src', filepath);
grunt.task.run('rsync:dev');
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-rsync');
...
};
rsync
任务本身表现良好;它可以相对快速地上传整个项目,但并不足够快以在每次编辑文件时运行。
我正在尝试使用 grunt.event.on
在再次运行任务之前修改 src
,使其只上传一个文件。然而,grunt.task.run('rsync:dev')
看起来根本没有任何作用。它没有引发错误,也没有任何输出。下面是我运行它并创建新文件时的输出:
$ grunt watch:upload --debug --stack
Running "watch:upload" (watch) task
Waiting...OK
>> File "ppp" added.
如果我提供了一个无效的任务名称,它会出现错误,因此显然它正在寻找任务,我不确定它正在执行什么操作。该文件从未到达我的服务器。
如何让它仅同步我保存的文件?
注意:newer 似乎也不起作用,因此我正在尝试通过
grunt.event.on('watch'
手动完成此操作。
grunt-contrib-watch
经常会出现不稳定的情况,让我很烦恼。而grunt-este-watch
更快、更干净、更可靠。 - Kafoso