反映源文件夹 grunt 的目标文件
Destination file that reflects source folders grunt
抱歉,如果这个线程的名称有点奇怪。很难一言以蔽之。
基本上,我希望我的文件夹设置如下所示:
html5
|
src-----------------------build------_config
| | |
master master Gruntfiles etc
| |
css-images-js-index.html |
| | | |
.css .jpg .js |
|
.css .jpg .js
在我的根文件夹 (html5) 中,我有一个 src 和一个 build 文件夹。在这两个文件夹中,都会有比主文件夹多很多的文件夹,所有这些文件夹都具有相同的布局(不同格式)。我基本上想要发生的是,我希望将 src > master 文件夹中的内容展平到相应的 build > master 文件夹中。我已经尝试了 here 所示的展平选项,但是,它展平了整个内容,导致 master 文件夹的内容直接放在构建文件夹中,这不是我想要的。我一直在用重命名函数弄乱一些东西,但对于这个任务来说它似乎过于复杂了。没有其他方法可以做到这一点吗?
编辑:我有这个任务:
copy: {
images: {
files: [
{
expand: true,
flatten: true,
cwd: "../src/",
src: ["**"],
dest: "../build/master",
filter: "isFile"
},
]
}
},
这正是它应该做的。 但是,我真的需要目标文件夹"master"是动态的。它不应该像现在这样被硬编码。它需要是从 src 文件夹复制的相应文件夹。不幸的是,把“**”放在那里是行不通的。
您需要将 cwd
与 flatten
(和 dest
)结合起来,以便在您想要的位置展平您想要的内容。
由于您不知道文件夹的名称,因此您必须使用自定义任务来获取文件夹列表,然后为每个 运行 生成一个 copy
目标:
grunt.registerTask('myCopy', function() {
var srcFolder = 'src';
var dstFolder = 'dest';
var fs = require('fs');
var path = require('path');
var srcpath = path.resolve(__dirname, srcFolder);
var folders = fs.readdirSync(srcpath).filter(function(file) {
return fs.statSync(path.join(srcpath, file)).isDirectory();
});
folders.forEach(function(f){
grunt.config.set("copy." + f, {
files : [{
expand: true,
flatten: true,
cwd: srcFolder + '/' + f,
src: '**',
dest: dstFolder + '/' + f,
filter: 'isFile',
}]
});
grunt.task.run('copy:' + f);
});
});
抱歉,如果这个线程的名称有点奇怪。很难一言以蔽之。
基本上,我希望我的文件夹设置如下所示:
html5
|
src-----------------------build------_config
| | |
master master Gruntfiles etc
| |
css-images-js-index.html |
| | | |
.css .jpg .js |
|
.css .jpg .js
在我的根文件夹 (html5) 中,我有一个 src 和一个 build 文件夹。在这两个文件夹中,都会有比主文件夹多很多的文件夹,所有这些文件夹都具有相同的布局(不同格式)。我基本上想要发生的是,我希望将 src > master 文件夹中的内容展平到相应的 build > master 文件夹中。我已经尝试了 here 所示的展平选项,但是,它展平了整个内容,导致 master 文件夹的内容直接放在构建文件夹中,这不是我想要的。我一直在用重命名函数弄乱一些东西,但对于这个任务来说它似乎过于复杂了。没有其他方法可以做到这一点吗?
编辑:我有这个任务:
copy: {
images: {
files: [
{
expand: true,
flatten: true,
cwd: "../src/",
src: ["**"],
dest: "../build/master",
filter: "isFile"
},
]
}
},
这正是它应该做的。 但是,我真的需要目标文件夹"master"是动态的。它不应该像现在这样被硬编码。它需要是从 src 文件夹复制的相应文件夹。不幸的是,把“**”放在那里是行不通的。
您需要将 cwd
与 flatten
(和 dest
)结合起来,以便在您想要的位置展平您想要的内容。
由于您不知道文件夹的名称,因此您必须使用自定义任务来获取文件夹列表,然后为每个 运行 生成一个 copy
目标:
grunt.registerTask('myCopy', function() {
var srcFolder = 'src';
var dstFolder = 'dest';
var fs = require('fs');
var path = require('path');
var srcpath = path.resolve(__dirname, srcFolder);
var folders = fs.readdirSync(srcpath).filter(function(file) {
return fs.statSync(path.join(srcpath, file)).isDirectory();
});
folders.forEach(function(f){
grunt.config.set("copy." + f, {
files : [{
expand: true,
flatten: true,
cwd: srcFolder + '/' + f,
src: '**',
dest: dstFolder + '/' + f,
filter: 'isFile',
}]
});
grunt.task.run('copy:' + f);
});
});