2017-06-16 77 views
0

我試圖讓grunt-ssh sftp和grunt-watch一起工作來發送修改過的文件。我設法得到這個工作,但與有線問題Grunt-ssh和grunt-watch在sftp上修改文件

我咕嚕配置

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(); 
}); 

這一點,從繁重的輸出

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任務之前增加一個等待被大加讚賞

回答

0

我解決了這個以確保配置來得及更新

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, 
      }, 
     } 
    },