Javascript 使用gruntjs自定义初始化任务重命名模板文件夹

Javascript 使用gruntjs自定义初始化任务重命名模板文件夹,javascript,gruntjs,Javascript,Gruntjs,我正在尝试为中的个人模板创建自定义初始化任务 这是在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 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();
  });
};
一切正常:根据
rename.json
info,从自定义模板的
root
文件夹正确生成或重命名文件和文件夹

问题是:如何动态重命名文件夹而不仅仅是文件

i、 e


init.filesToCopy
方法仅在第一次构建
文件
对象时查看特定文件(而不是目录)的
重命名.json
匹配。您最好的选择是以编程方式修改
init.filesToCopy
init.copyAndProcess
之间的
文件
对象,以另一种方式完成此操作并绕过无法重命名文件夹的限制,是1)设置grunt contrib copy任务以复制文件夹和文件,并将所需的任何名称应用于新文件夹/文件,然后2)使用grunt contrib clean任务清除旧文件/文件夹,从而产生与重命名文件夹相同的净效果。

这可以通过修改init.filesToCopy对象的结果来实现。但是,您需要修改密钥,而不是每对的值

例如,我有一个名为lib/的文件夹,我希望将内容复制到应用程序中/

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])

您的意思是我必须通过在init.filesToCopy和init.copyAndProcess之间循环files对象来手动替换文件夹名吗?请尝试
console.log(files)
查看它包含什么。然后,用编程的方式修改它。我试着用这种方式修改它,但是似乎copyAndProcess仍然得到了原始对象。非常感谢Ben的支持。但是你到底需要
类型:'skin'
做什么呢?在学习了更多关于grunt init的知识之后,这一点都没有用。生活和学习,我认为这在当时是有意义的。。。
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);