我正在尝试为Grunt中的个人模板创建自定义 init任务。
这是在grunt init:mytemplate
exports.description = 'Try Grunt';
exports.warnOn = '*';
exports.template = function(grunt, init, done) {
grunt.helper('prompt', {type: 'skin'}, [
grunt.helper('prompt_for', 'name', 'trygrunt'),
grunt.helper('prompt_for', 'title', 'Im Trying GruntJS'),
grunt.helper('prompt_for', 'author_name', 'Myself')
],
function(err, props) {
var files = init.filesToCopy(props);
init.copyAndProcess(files, props);
done();
});
};
一切正常:根据root
信息,从自定义模板的rename.json
文件夹中正确生成或重命名文件和文件夹。
问题是:我怎样才能动态重命名文件夹而不仅仅是文件?
即
{
"libs/name.js": "libs/{%= name %}.js" //this works fine
"src/name": "src/{%= name %}" //this doesn't work
}
答案 0 :(得分:3)
init.filesToCopy
方法在首次构建renames.json
对象时,仅查找files
特定文件(非目录)匹配项。您最好的选择是以编程方式修改files
和init.filesToCopy
之间的init.copyAndProcess
对象。
答案 1 :(得分:3)
这可以通过修改init.filesToCopy对象的结果来实现。但是,您需要修改密钥而不是每对的值。
例如,我有一个名为lib /的文件夹,我希望将内容复制到app /
var files = init.filesToCopy(props),
libFolder = 'app';
// Repath the files correctly
for (var file in files) {
if (file.indexOf('lib/') > -1) {
var path = files[file],
newFile = file.replace('lib/', libFolder + '/');
files[newFile] = path;
delete files[file];
}
}
init.copyAndProcess(files, props);
还值得注意的是,rename.json适用于lib / value 而不是新文件夹。
我做过的一件事是使用props.main值来提取libFolder值(例如libFolder = props.main.split('/')[0])
答案 2 :(得分:0)
实现此目的并解决无法重命名文件夹的限制的另一种方法是1)设置grunt-contrib-copy任务来复制文件夹和文件,并将所需的任何名称应用于新文件夹/文件,然后2)有一个grunt-contrib-clean任务清理旧文件/文件夹,导致与重命名文件夹相同的净效果。