我正在构建自定义的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')
);
}
},
答案 0 :(得分:3)
首先,我发现使用yeoman
' this.template()
更容易,而不是使用来自其中的this.fs.copy()
/ this.fs.copyTpl()
mem-fs-editor
的实例,但是YMMV
无论如何,在尝试编写之前,需要在生成器中设置this.sourceRoot('rel/path/to/source/root')
和this.destinationRoot('rel/path/to/dest/root')
,以确保设置了正确的模板和目标上下文。 See yeoman's getting started guide on interacting with the files system from more information。 this.destinationRoot()
应该相对于当前项目的根目录定义(我在下面解释),而this.sourceRoot()
应该相对于生成器文件的根目录定义。 / p>
您还必须考虑到,yeoman将尝试找出您当前在命令行中的任何应用程序的根目录。它通过向上导航(即/home/diegoaguilar/koala
- > /home/diegoaguilar/
)直到找到.yo-rc.json
文件来完成此操作。然后,Yeoman将您运行命令的最近.yo-rc.json
的目录作为项目的预期根目录。
在您的情况下,您可能希望删除/移动/重命名/home/diegoaguilar/.yo-rc.json
(如果存在)。然后,您可以创建项目所在的目录,并在那里运行生成器。这看起来像
/home/diegoaguilar/ $> mkdir koala
/home/diegoaguilar/ $> cd koala
/home/diegoaguilar/koala/ $> yo koala
如果您希望或需要将/home/diegoaguilar/.yo-rc.json
留在那里,则应将生成器中的this.destinationRoot()
设置为/home/diegoaguilar/
,以便写入/home/diegoaguilar/koala/
你会使用this.destinationRoot('koala')
。