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

问题描述 投票:1回答:1

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

基本上,用法是:

  • 打开一个新的终端
  • 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),我应该能够将此路径添加为前缀,而不是设置默认路径而不是静态路径。 这就是Login示例不起作用的原因。

一些代码示例:

  • $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()
  • __dirname
  • path.js库

类似:

所以,伙计们,你有一个线索,我如何得到当前的文件夹路径? 这里有替代解决方案吗?

谢谢 !

编辑1:


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

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

node.js path generator yeoman yeoman-generator
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.