如何为自定义yeoman生成器文件设置目标路径?

时间:2015-11-03 16:31:12

标签: javascript yeoman yeoman-generator

我正在构建自定义的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')
      );
    }
  },

1 个答案:

答案 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 informationthis.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')