Grunt-ssh 和 grunt-watch 到 sftp 更改的文件
Grunt-ssh and grunt-watch to sftp on changed files
我正在尝试让 grunt-ssh sftp 与 grunt-watch 一起工作以仅发送修改后的文件。我设法让它工作,但有一个有线问题
我的 grunt 配置
grunt.initConfig({
watch: {
upload: {
files: ['*.*'],
tasks: ['sftp'],
options: {
spawn: false,
},
}
},
sftp:{
upload:{
options: {
host: '192.168.10.10',
username: 'blah',
password: 'blah',
path:'/home/vagrant/Sites/test/',
showProgress: true,
},
files:{'./': []}
},
},
});
监听事件修改配置的函数
var changedFiles = {'./': []};
var onChange = grunt.util._.debounce(function() {
grunt.config('sftp.upload.files', changedFiles);
changedFiles = {'./': []};
console.log(grunt.config('sftp.upload.files'))
}, 275);
grunt.event.on('watch', function(action, filepath) {
changedFiles['./'].push(filepath);
onChange();
});
这是 grunt 的输出
Running "watch" task
Waiting...
{ './': [ 'Gruntfile.js' ] }
>> File "Gruntfile.js" changed.
Running "sftp:upload" (sftp) task
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 1 files
Running "watch" task
Completed in 0.617s at Fri Jun 16 2017 11:47:56 GMT+0100 (BST) -
Waiting...
Reloading watch config...
Running "watch" task
Waiting...
{ './': [ 'affiliate_with_log.php', 'Gruntfile.js' ] }
>> File "affiliate_with_log.php" changed.
>> File "Gruntfile.js" changed.
Running "sftp:upload" (sftp) task
affiliate_with_log.php [====================] 100% of 10KB
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 2 files
Running "watch" task
Completed in 0.546s at Fri Jun 16 2017 11:48:08 GMT+0100 (BST) -
Waiting...
>> File "affiliate_with_log.php" changed.
>> File "img.php" changed.
Running "sftp:upload" (sftp) task
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
affiliate_with_log.php [====================] 100% of 10KB
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 2 files
Running "watch" task
Completed in 0.538s at Fri Jun 16 2017 11:48:19 GMT+0100 (BST) -
Waiting...
>> File "img.php" changed.
Running "sftp:upload" (sftp) task
{ './': [ 'img.php' ] }
{ './': [ 'img.php' ] }
{ './': [ 'img.php' ] }
affiliate_with_log.php [====================] 100% of 10KB
img.php [====================] 100% of 877B
Created 1 directories, copied 2 files
在此输出中,您可以看到文件的控制台日志每次都是正确的,但它似乎并不总是上传到正确的文件,我无法弄清楚原因。任何帮助将不胜感激
我通过在 sftp 任务之前添加等待时间来确保配置有时间更新来解决这个问题
grunt.registerTask('wait', 'Wait for a set amount of time.', function() {
delay = 1;
var d = delay ? delay + ' second' + (delay === '1' ? '' : 's') : 'forever';
grunt.log.write('Waiting ' + d + '...');
// Make this task asynchronous. Grunt will not continue processing
// subsequent tasks until done() is called.
var done = this.async();
// If a delay was specified, call done() after that many seconds.
if (delay) { setTimeout(done, delay * 1000); }
});
更改了监视任务:
watch: {
upload: {
files: ['./*.*', './resources/**/*.*', './protected/**/*.*'],
tasks: ['wait', 'sftp:upload'],
options: {
spawn: false,
},
}
},
我正在尝试让 grunt-ssh sftp 与 grunt-watch 一起工作以仅发送修改后的文件。我设法让它工作,但有一个有线问题
我的 grunt 配置
grunt.initConfig({
watch: {
upload: {
files: ['*.*'],
tasks: ['sftp'],
options: {
spawn: false,
},
}
},
sftp:{
upload:{
options: {
host: '192.168.10.10',
username: 'blah',
password: 'blah',
path:'/home/vagrant/Sites/test/',
showProgress: true,
},
files:{'./': []}
},
},
});
监听事件修改配置的函数
var changedFiles = {'./': []};
var onChange = grunt.util._.debounce(function() {
grunt.config('sftp.upload.files', changedFiles);
changedFiles = {'./': []};
console.log(grunt.config('sftp.upload.files'))
}, 275);
grunt.event.on('watch', function(action, filepath) {
changedFiles['./'].push(filepath);
onChange();
});
这是 grunt 的输出
Running "watch" task
Waiting...
{ './': [ 'Gruntfile.js' ] }
>> File "Gruntfile.js" changed.
Running "sftp:upload" (sftp) task
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 1 files
Running "watch" task
Completed in 0.617s at Fri Jun 16 2017 11:47:56 GMT+0100 (BST) -
Waiting...
Reloading watch config...
Running "watch" task
Waiting...
{ './': [ 'affiliate_with_log.php', 'Gruntfile.js' ] }
>> File "affiliate_with_log.php" changed.
>> File "Gruntfile.js" changed.
Running "sftp:upload" (sftp) task
affiliate_with_log.php [====================] 100% of 10KB
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 2 files
Running "watch" task
Completed in 0.546s at Fri Jun 16 2017 11:48:08 GMT+0100 (BST) -
Waiting...
>> File "affiliate_with_log.php" changed.
>> File "img.php" changed.
Running "sftp:upload" (sftp) task
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
{ './': [ 'affiliate_with_log.php', 'img.php' ] }
affiliate_with_log.php [====================] 100% of 10KB
Gruntfile.js [====================] 100% of 6KB
Created 1 directories, copied 2 files
Running "watch" task
Completed in 0.538s at Fri Jun 16 2017 11:48:19 GMT+0100 (BST) -
Waiting...
>> File "img.php" changed.
Running "sftp:upload" (sftp) task
{ './': [ 'img.php' ] }
{ './': [ 'img.php' ] }
{ './': [ 'img.php' ] }
affiliate_with_log.php [====================] 100% of 10KB
img.php [====================] 100% of 877B
Created 1 directories, copied 2 files
在此输出中,您可以看到文件的控制台日志每次都是正确的,但它似乎并不总是上传到正确的文件,我无法弄清楚原因。任何帮助将不胜感激
我通过在 sftp 任务之前添加等待时间来确保配置有时间更新来解决这个问题
grunt.registerTask('wait', 'Wait for a set amount of time.', function() {
delay = 1;
var d = delay ? delay + ' second' + (delay === '1' ? '' : 's') : 'forever';
grunt.log.write('Waiting ' + d + '...');
// Make this task asynchronous. Grunt will not continue processing
// subsequent tasks until done() is called.
var done = this.async();
// If a delay was specified, call done() after that many seconds.
if (delay) { setTimeout(done, delay * 1000); }
});
更改了监视任务:
watch: {
upload: {
files: ['./*.*', './resources/**/*.*', './protected/**/*.*'],
tasks: ['wait', 'sftp:upload'],
options: {
spawn: false,
},
}
},