Gruntjs grunt watch批处理任务不';行不通

Gruntjs grunt watch批处理任务不';行不通,gruntjs,grunt-contrib-watch,Gruntjs,Grunt Contrib Watch,以下是我的Grunfile watch任务: watch: { jsFiles: { files: ['www/js/*.js','!www/js/*.min.js'], tasks: ['jshint','<%= pkg.jsTask %>'], options: { event: ['added', 'changed'], spawn: false } }, cssFiles : { files

以下是我的Grunfile watch任务:

watch: {
  jsFiles: {
    files: ['www/js/*.js','!www/js/*.min.js'],
    tasks: ['jshint','<%= pkg.jsTask %>'],
    options: {
        event: ['added', 'changed'],
        spawn: false
    }
  },
  cssFiles : {
    files : ['<%= pkg.cssTask === "less" ? "www/less/*.less" : "www/css/*.css" %>'],
    tasks : ['<%= pkg.cssTask %>'],
    options: {
        event: ['added', 'changed'],
        spawn: false
    }
  },
  pageFiles : {
    files: ['www/**.php','www/**.html'],
    tasks: ['<%= "uglify:some" === pkg.jsTask ? "dom_munger:whenSomeJs" : "dom_munger:whenAllInOneJs" %>','undoDomMungerQuoteShit'],
    options: {
        event: ['added', 'changed'],
        spawn: false
    }
  },
  otherFiles : {
    files: ['www/**','!www/**.php','!www/**.html','!www/js/*.js','!www/css/*.less','!www/css/*.css'],
    tasks: ['copy:regularFiles'],
    options: {
        event: ['added', 'changed'],
        spawn: false
    }
  },
  allFiles : {
    files: ['www/**'],
    options: {
        event: ['deleted'],
        spawn: false
    } 
  },
  ftpFiles : {
    files: ['build/**'],
    tasks: ['copy:ftp'],
    options: {
        event: ['added', 'changed'],
        spawn: false
    }
  },
  ftpDelete : {
    files: ['build/**'],
    options: {
        event: ['deleted'],
        spawn: false
    }
  }
}
观察:{
jsFiles:{
文件:['www/js/*.js','!www/js/*.min.js'],
任务:['jshint',''],
选项:{
事件:[“已添加”、“已更改”],
产卵:假
}
},
cssFiles:{
文件:[''],
任务:[''],
选项:{
事件:[“已添加”、“已更改”],
产卵:假
}
},
页面文件:{
文件:['www/**.php','www/**.html'],
任务:['','UndomMungerQuoteshit'],
选项:{
事件:[“已添加”、“已更改”],
产卵:假
}
},
其他文件:{
文件:['www/**'、'!www/**.php'、'!www/**.html'、'!www/js/*.js'、'!www/css/*.less'、'!www/css/*.css'],
任务:[“复制:常规文件”],
选项:{
事件:[“已添加”、“已更改”],
产卵:假
}
},
所有文件:{
文件:['www/**'],
选项:{
事件:[“已删除”],
产卵:假
} 
},
FTP文件:{
文件:['build/**'],
任务:['copy:ftp'],
选项:{
事件:[“已添加”、“已更改”],
产卵:假
}
},
ftpDelete:{
文件:['build/**'],
选项:{
事件:[“已删除”],
产卵:假
}
}
}
所有子任务都将取消处理的文件放在“生成”文件夹中。所有子任务,但有一个按预期工作:“ftpFiles”

此子任务在“生成”文件夹中查找更改。当我手动更新一些“构建”文件夹文件时,“ftpFiles”起作用。但是,当更改的文件被其他子任务更新时,“ftpFiles”不会触发


如何修复此问题?

看起来您需要并发监视程序才能运行。 你可以使用或实现这一点

下面是一个grunt并发示例:


请发布运行监视任务的grunt配置。同时使用verbose参数发布您的grunt。我跳过了所有“监视…更改”,因为太长:注册“grunt contrib watch”本地Npm模块任务。阅读C:\xampp\htdocs\swdesign\node\u modules\grunt contrib watch\package.json…确定解析C:\xampp\htdocs\swdesign\node\u modules\grunt contrib watch\package.json…确定加载“watch.js”任务…确定+监视运行“watch”任务等待。。。验证配置中是否存在属性监视…确定验证配置中是否存在属性监视.jsFiles.files…确定验证配置中是否存在属性监视.ftpFiles.files…确定查看www\js\swlib.js以了解更改….>>文件“www\js\swlib.js”已更改。运行“uglify:allInOne”(uglify)任务验证属性uglify.allInOne是否存在于配置中…确定文件:www/js/jquery.linkify-1.0-min.js、www/js/main.js、www/js/swlib.js->build/js/sw.min.js选项:banner=“/*!sw Design 2014-06-07*/\r\n”,footer=”,compress={“drop\u控制台”:true},mangle={},beautify=false,report=“min”,flatte,wrap=“sw”使用UglifyJS缩小…阅读www/js/jquery.linkify-1.0-min.js…阅读www/js/main.js…阅读www/js/swlib.js…编写build/js/sw.min.js…创建的文件build/js/sw.min.js:13.82 kBåÆ6.82kB@PanGa我需要它触发“ftpFiles”子任务,因为“build”文件夹中的js文件发生了更改,这是“ftpFiles”监视的文件夹。
concurrent: {
  options: {
    logConcurrentOutput: true
  },
  dev: {
    tasks: ["watch:js", "watch:ftp"]
  }
}

grunt.registerTask("watch-dev", ["concurrent:dev"]);