我正在研究一个我最初使用grunt-init编写的自定义生成器。我注意到的一个区别是grunt-init自动处理root中的所有文件作为模板,但是使用yeoman生成器,你必须使用.template()。我熟悉如何使用.template()处理任何单个文件,但是是否可以处理整个目录?
答案 0 :(得分:11)
这个问题很烦人。当我第一次使用自耕农时,我遇到了这个。我认为以下代码段可以为您提供帮助。
this.directory('scripts', 'scripts');// script is folder name
答案 1 :(得分:7)
查看Yeoman生成器代码,似乎没有内置的方法来执行此操作。我解决这个问题的方法是从内置的生成器代码中复制一些代码并根据我的需要进行修改。我确定文件是否是基于_
前缀约定的模板,因为我想重命名文件以排除该前缀,但您可以将每个文件视为模板,它可以正常工作。这将复制目录中的所有文件,所以我也做的是排除默认情况下在OSX上找到的.DS_STORE
文件,但由于这是一个特定的情况,我在此处没有包含它。
require('path');
MyGenerator.prototype._processDirectory = function(source, destination) {
var root = this.isPathAbsolute(source) ? source : path.join(this.sourceRoot(), source);
var files = this.expandFiles('**', { dot: true, cwd: root });
for (var i = 0; i < files.length; i++) {
var f = files[i];
var src = path.join(root, f);
if(path.basename(f).indexOf('_') == 0){
var dest = path.join(destination, path.dirname(f), path.basename(f).replace(/^_/, ''));
this.template(src, dest);
}
else{
var dest = path.join(destination, f);
this.copy(src, dest);
}
}
};
答案 2 :(得分:-1)