我正在构建一个自定义的yeoman生成器,因此在创建文件时,它们会在当前位置的上一级目录或在..
处创建,例如,如果我运行:
则文件将被创建在上一级目录中。
yo koala
从
/home/diegoaguilar/koala
创建的文件将被放置在/home/diegoaguilar
。我应该如何告诉生成器应该复制文件的路径?我真的认为应该是process.cwd()
或者仅仅是yeoman生成器运行的位置。这是我得到的文件生成代码:
writing: {
app: function () {
this.fs.copyTpl(
this.templatePath('_package.json'),
this.destinationPath('package.json'),
{appname: this.appname}
);
this.fs.copy(
this.templatePath('_bower.json'),
this.destinationPath('bower.json')
);
},
projectfiles: function () {
this.fs.copy(
this.templatePath('editorconfig'),
this.destinationPath('.editorconfig')
);
this.fs.copy(
this.templatePath('jshintrc'),
this.destinationPath('.jshintrc')
);
}
},
this.template()
,所以我想在这里也包括答案:this.template()
的主要优点是可以替代this.fs.copy()
和this.fs.copyTpl()
,并且默认提供当前生成器实例(即this
)作为模板上下文。如果您的文件是直接复制而没有需要进行模板化的ejs
标记,则无论是否提供this
都无关紧要;mem-fs-editor
将正确处理它。 - Joshua Skrzypekthis.fs.copy()
并将进程选项传递给mem-fs-editor
,如另一个问题的此答案中所讨论的。经过一番深入研究,我发现copyTpl()
函数不允许像copy()
那样使用process
函数,这正是因为copyTpl()
本身实际上调用了copy()
,并且在process
选项中已经传递了一个调用ejs.render()
的函数。 - Joshua Skrzypek