Plugins Gruntjs:如何使复制任务只复制监视中更改的文件

Plugins Gruntjs:如何使复制任务只复制监视中更改的文件,plugins,task,gruntjs,Plugins,Task,Gruntjs,所以在GruntContribWatchPluginInfo页面上,有一个关于如何使jshint仅为更改的文件运行的示例 grunt.initConfig({ 观察:{ 脚本:{ 文件:['lib/*.js'], 任务:['jshint'], 选项:{ 诺斯潘:是的, }, }, }, jshint:{ 全部:['lib/*.js'], }, }); grunt.event.on('watch',函数(操作,文件路径){ config(['jshint','all',filepath); });

所以在GruntContribWatchPluginInfo页面上,有一个关于如何使jshint仅为更改的文件运行的示例

grunt.initConfig({
观察:{
脚本:{
文件:['lib/*.js'],
任务:['jshint'],
选项:{
诺斯潘:是的,
},
},
},
jshint:{
全部:['lib/*.js'],
},
});
grunt.event.on('watch',函数(操作,文件路径){
config(['jshint','all',filepath);
});
我没有亲自测试过。但是拿着这个应用到我的复制任务中,没有成功。 grunt contrib复制任务设置为复制我的角度项目的图像和模板。我很高兴知道我是否可以把这项工作用于复制任务,如果可以,我做错了什么

非常感谢你

这是我的精简Grunfile.js

//构建配置。
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
//将目录和文件从一个位置复制到另一个位置。
副本:{
//发展
devTmpl:{
档案:[{
cwd:'src/tpl/',
src:['***'],
dest:'app/tpl/',
扁平化:错误,
扩展:正确
}]
},
devImg:{
档案:[{
cwd:'src/img/',
src:['***'],
目标:“app/img/”,
扁平化:错误,
扩展:正确
}]
}
},
//监视文件的更改并运行任务
观察:{
//模板,复制
模板:{
文件:“src/tpl/***”,
任务:['copy:devTmpl'],
选项:{
诺斯潘:是的,
}
},
//图像,复制
图像:{
文件:“src/img/***”,
任务:['copy:devImg'],
选项:{
诺斯潘:是的,
}
}
}
});
//观看活动
grunt.event.on('watch',函数(操作,文件路径){
//将copy:devTmpl配置为仅在已更改的文件上运行
config(['copy','devTmpl',filepath);
//将copy:devImg配置为仅在已更改的文件上运行
grunt.config(['copy','devImg',filepath);
});
//插件:
grunt.loadNpmTasks('grunt-contrib-copy');
//任务:
/*DEV:使用未优化的构建设置编译应用程序,将构建工件放置在dist目录中,并监视文件更改。
运行:grunt dev*/
registerTask('dev','Running“DEVELOPMENT',监视文件并编译…'[
“默认值”,
“注意”
]);
/*默认:使用未优化的生成设置编译应用程序,并将生成工件放置在dist目录中。
跑步:咕噜*/
registerTask('default',运行“default”,编译所有内容。“”[
'副本:devTmpl',
“复制:devImg”
]);
}

您需要将
grunt.config
指向配置中的正确属性:

grunt.event.on('watch', function(action, filepath) {
  var cfgkey = ['copy', 'devTmpl', 'files'];
  grunt.config.set(cfgkey, grunt.config.get(cfgkey).map(function(file) {
    file.src = filepath;
    return file;
  }));
});
使用grunt sync()而不是grunt contrib copy,并查看要同步的目录

更新-以下是一个示例:

grunt.initConfig({
  sync: {
    copy_resources_to_www: {
      files: [
        { cwd: 'src', src: 'img/**', dest: 'www' },
        { cwd: 'src', src: 'res/**', dest: 'www' }
      ]
    }
  }
});

cwd表示当前工作目录。将资源复制到www只是一个标签。

哦,我错了,我以为你可以这样设置配置。我编辑了答案。试试那一个。:/不,我想我必须离开脚本复制所有文件:)@GnrlBzik不要这么快放弃!谢谢你,丹。我优化了我的grunt任务,所以它没有那么糟糕,但我很快就会重新访问我的grunt构建脚本,然后我会抓狂。如果文档有更有用的内容可以阅读,那就太好了。grunt sync可能很好,但示例非常迟钝。如果您正在加载dist文件夹,并且希望将dist文件夹同步到另一个单独的文件夹,这可能会很有帮助:我认为,可以选择使用更新的任务。