[英]Grunt Copy task overwrites destination parent directory
我对Grunt很陌生。 我正在尝试从一个位置复制每个子目录,并将每个子目录放置在另一个目标目录中。 我正在执行自定义任务,因为无法确定源位置中将存在多少个子目录。 我面临的问题是每次执行复制时,都会覆盖以前的目录结构。
我尝试将“ cwd”设置为要从中复制的子目录的根目录,但问题仍然存在。
资料夹结构:
container
|
- dist/ *I want to copy each src folder here
|
GruntFile.js
subapps
|
- thing1/dist
| *I want to copy each of these dirs (thing1/dist, thing2/dist) to container/dist eg: container/dist/thing1/dist, container/dist/thing2/dist
- thing2/dist
我的任务:
grunt.registerTask('copySubApps', function () {
grunt.file.expand({filter : 'isDirectory'}, '../subapps/*/').forEach(function (subapp) {
var subAppName = path.basename(subapp);
var subAppDest = grunt.template.process('dist/subapps/<%= appName %>/dist/',{data:{appName:subAppName}});
grunt.config('subAppDest', subAppDest);
grunt.config('subAppName', subAppName);
grunt.task.run('copy:subapp');
});
});
组态:
copy: {
subapp: {
expand: true,
src: '**/*',
dest: '<%= subAppDest %>',
cwd: '../subapps/<%= subAppName %>/dist'
}
}
随后的每个副本都覆盖其前面的副本。 如何避免这种情况? 我确信这是一种非常幼稚的方法,因此非常欢迎提出建议和指导。 :-)一旦工作,我需要进一步过滤每个子文件夹中要复制的项目。 例如subapps / thing1 / style,!subapps / thing1 / common等。
谢谢!
很抱歉回答我自己的问题,但是我对Grunt任务配置缺乏最初的了解。 希望这可以帮助正在努力了解如何动态创建任务目标的其他人。
这是我想出的:
grunt.file.expand({filter: 'isDirectory'}, '../subapps/*/').forEach(function (subapp) {
var subAppName = path.basename(subapp);
var subAppDest = grunt.template.process('dist/subapps/<%= appName %>/', {data: {appName: subAppName}});
var distWorkingDir = grunt.template.process('../subapps/<%= appName %>/', {data: {appName: subAppName}});
var templatesWorkingDir = grunt.template.process('../subapps/<%= appName %>/src/', {data: {appName: subAppName}});
//add a copy target for each subApp dir
var distTarget = subAppName + '_dist';
var templateTarget = subAppName + '_template';
subAppTargetNames.push('copy:' + distTarget);
subAppTargetNames.push('copy:' + templateTarget);
subAppTargets.copy[distTarget] = {
expand: true,
src: 'dist/*',
dest: subAppDest,
cwd: distWorkingDir
};
subAppTargets.copy[templateTarget] = {
expand: true,
src: 'templates/*',
dest: subAppDest,
cwd: templatesWorkingDir
};
});
//Merge new copy targets with existing copy configuration.
grunt.config.merge(subAppTargets);
//Run each of the newly created copy targets
grunt.task.run(subAppTargetNames);
});
基本上,上面的操作如下:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.