Javascript 反映源文件夹grunt的目标文件
抱歉,如果这个线程的名称有点奇怪。很难用一句话来解释 基本上,我希望我的文件夹设置是这样的:Javascript 反映源文件夹grunt的目标文件,javascript,file,gruntjs,concat,Javascript,File,Gruntjs,Concat,抱歉,如果这个线程的名称有点奇怪。很难用一句话来解释 基本上,我希望我的文件夹设置是这样的: html5 | src-----------------------build------_config | | | master master Gruntfiles etc |
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文件夹中。但是,我尝试了显示的展平选项,它展平了整个内容,导致主文件夹的内容直接放在构建文件夹中,这不是我想要的。我对重命名函数做了一些修改,但对于这个任务来说似乎过于复杂了。没有别的办法吗
编辑:我有这个任务:
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);
});
});
您需要将
cwd
与flatte
(和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);
});
});
也许最好采取现成的解决方案?例如,也许最好采用现成的解决方案?例如,对不起,我忘了在帖子中提到我不知道“主”文件夹的名称。主文件夹旁边将有多个随机命名的文件夹。我可以改为将“master”切换为“**”吗?更新:将dest“master”文件夹更改为“**”不起作用。这将创建一个名为“**”的文件夹。好的,没有内置的方法,但您可以使用自定义任务为每个“主控”生成复制目标列表,然后运行这些。我已经更新了我的答案谢谢!这很好用。我认为这类东西可能内置于Grunt中,但我可以看出,通常情况下,每个src/build文件夹都有一个单独的项目。非常感谢!对不起,我忘了在帖子中提到我不知道“主”文件夹的名称。主文件夹旁边将有多个随机命名的文件夹。我可以改为将“master”切换为“**”吗?更新:将dest“master”文件夹更改为“**”不起作用。这将创建一个名为“**”的文件夹。好的,没有内置的方法,但您可以使用自定义任务为每个“主控”生成复制目标列表,然后运行这些。我已经更新了我的答案谢谢!这很好用。我认为这类东西可能内置于Grunt中,但我可以看出,通常情况下,每个src/build文件夹都有一个单独的项目。非常感谢!