如何获取正在运行的Yeoman生成器的当前路径

时间:2017-12-16 21:48:13

标签: node.js path generator yeoman yeoman-generator

我有自己的Yeoman发电机 我创建了一个子生成器来创建一个新的 view 文件夹。

基本上,用法是:

  • 打开一个新终端
  • cd进入父文件夹
  • 运行yeoman命令yo my-generator:view
  • 按照说明进行操作

视图子生成器会提示文件夹名称。

例如:

如果我想在默认的视图目录中创建视图身份验证

cd views
yo my-generator:view

结果应为:

views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html

现在,如果我想为身份验证视图创建子视图登录

cd views/authentication
yo my-generator:view

结果应为:

views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html
│   ├── login
│   │   ├── login.controller.js
│   │   ├── login.template.html

相反,当前(错误)的结果是:

views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html
├── login
│   ├── login.controller.js
│   ├── login.template.html

我在这里的斗争是,当我运行命令时,我不知道如何获取当前路径。

实际上,我只是使用默认前缀路径 app / views / 创建新文件夹。
这就是身份验证示例的作用原因。

但是当我的当前路径在 views 文件夹中更深处时,它会在 views 文件夹的根目录下添加新文件夹。
如果我可以获得当前路径(cmd),我应该能够将此路径添加为前缀,而不是设置默认路径而不是静态路径。
这就是登录示例不起作用的原因。

一些代码示例:

  • $that是当前的生成器对象
  • $that.viewNameCamel是用户设置的文件夹的名称

我使用.txt文件作为模板,然后创建controller.js文件。

const filePrefix = 'app/views/' + $that.viewNameCamel + '/' + $that.viewNameCamel + '.';

const exampleData = {
   controllerAlias: 'vm',
   otherVar: 'example'
};

$that.fs.copyTpl(
   $that.templatePath('controller.txt'), 
   filePrefix + 'controller.js', 
   exampleData
);

尝试:

  • $ that.env.cwd
  • process.cwd()
  • __目录名称
  • path.js library

类似:

那么大家好,您是否知道如何获取当前文件夹路径? 这里有替代解决方案吗?

谢谢!

编辑1:

此处的问题是项目根目录中的.yo-rc.json 该文件重写路径,所以我应该删除它来解决问题 但是,如果删除此文件,将不再保存用户配置 我需要它用于以后的子发电机使用。

是否有其他方法可以保存用户配置? 或者再一次,有另一种方法来获得当前的真实路径吗?

2 个答案:

答案 0 :(得分:1)

我知道这有点老了,但对于以后再来的任何人, 来自文档https://yeoman.io/authoring/file-system.html

If you want to know from where the user is running yo, then you can get the path with this.contextRoot. This is the raw path where yo was invoked from; before we determine the project root with .yo-rc.json.

根据我的经验,删除.yo-rc.json意味着您需要手动检查提供的路径是否正确,确定固定的根点会有所帮助。

答案 1 :(得分:0)

只需从根目录中删除.yo-rc.json文件即可。这是负责查找根目录的文件,无论您在文件系统中的位置如何。

我不确定删除它的后果,但我建造的发电机似乎没有发生任何事情。

现在您可以使用process.cwd(),它将获得正确的工作目录。

对于你的用例有一个前缀app/views,你可能需要编写一些Javascript来附加或不根据你的位置附加前缀,这应该是微不足道的。