复制任务覆盖目标父目录
Grunt Copy task overwrites destination parent directory
我对Grunt相当陌生。我试图从一个位置复制每个子目录,并将每个放在另一个目标目录。我在自定义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);
});
上面的代码基本上是这样做的:
- 查找'subapps'的所有子目录。
相关文章:
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- Href:当前DIV中的目标ID
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- 如果助手不在,如何从Grunt中的代码中调用任务
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- WinJS(WP8.1):从后台任务更新辅助磁贴
- 如何使用gump任务将html转换为javascript字符串
- 在等待异步任务时永久循环
- 以ECMAScript 5及更高版本为目标时,八进制文字不可用
- 如何使用ember.js在操作中传递当前上下文中目标旁边的信息
- load-grunt-config 找不到目标任务
- 咕噜咕噜的任务目标数组
- Grunt:自定义任务-否;任务名称“;找到个目标
- Grunt.js模板:在任务中使用目标的名称
- 复制任务覆盖目标父目录
- 是否可以在属性中使用Grunt任务目标名?
- 确保在前一个功能完成后启动下一个功能.在任务完成之前,禁用所有目标元素的已注册事件