Node.js 如何获取正在运行的发电机的电流路径

Node.js 如何获取正在运行的发电机的电流路径,node.js,path,generator,yeoman,yeoman-generator,Node.js,Path,Generator,Yeoman,Yeoman Generator,我有自己的约曼发电机。 我创建了一个子生成器来创建一个新的视图文件夹 基本上,用法是: 打开一个新的终端 将cd放入父文件夹 运行yeoman命令yomygenerator:view 按照说明去做 此视图子生成器提示输入文件夹名称 例如: 如果要在默认视图目录上创建视图身份验证 cd views yo my-generator:view 结果应该是: views //- Already created by the main generator ├── authentication │

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

基本上,用法是:

  • 打开一个新的终端
  • 将cd放入父文件夹
  • 运行yeoman命令
    yomygenerator:view
  • 按照说明去做
此视图子生成器提示输入文件夹名称

例如:

如果要在默认视图目录上创建视图身份验证

cd views
yo my-generator:view
结果应该是:

views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html
views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html
│   ├── login
│   │   ├── login.controller.js
│   │   ├── login.template.html
现在,如果我想为身份验证视图创建子视图login

cd views/authentication
yo my-generator:view
结果应该是:

views //- Already created by the main generator
├── authentication
│   ├── authentication.controller.js
│   ├── authentication.template.html
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/创建了一个新文件夹
这就是验证示例
起作用的原因

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

一些代码示例:

  • $这是当前生成器对象
  • $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库
类似:

伙计们,你们知道如何获取当前文件夹路径吗?
这里有其他的解决办法吗

谢谢

编辑1:


这里的问题是projet根目录中存在的
.yo rc.json

文件重写了路径,因此我应该将其删除以解决问题。
但是,如果删除此文件,将不再保存用户配置。
我需要它,以便以后使用子生成器

是否有其他方法保存用户配置?

或者,是否有其他方法获取当前实际路径?

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

我不确定移除它的影响,但我建造的发电机似乎什么也没发生

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

cd views
yo my-generator:view

为了让您的用例有一个前缀
app/views
,您可能需要编写一些Javascript来根据您所在的位置附加或不附加前缀,这应该很简单。

我知道这有点老了,但对于任何后来的人来说, 从文件中

如果您想知道用户运行yo的位置,那么可以使用this.contextRoot获取路径。这是调用yo的原始路径;在使用.yo-rc.json确定项目根之前。


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

感谢您的回答,但我需要保持此文件的活动状态。其中的数据来自另一个生成器,我需要它们作为视图生成器(如应用程序名称、当前语言、作者等)。我应该能够随时访问这些数据(最终,我可以将这些数据保存在新的自定义文件中,我将尝试一些东西)。嗯,如果您愿意在每个目录中创建一个配置为空的
.yorc.json
的文件,那么您可以实现这一点,但这将是一个丑陋的目录结构。或者有没有办法创建文件,识别工作目录,然后删除文件?太牵强了,但我想值得一试。如果我可以简单地删除
.yo rc.json
文件以获得真正的路径,我会找到正确路径的解决方案,不用担心。然后,我必须将所有引用更改为
x.config.set(…)
x.config.get(…)
,以避免创建和使用该文件。另一种选择是使用类似的方法。然后我会有我自己的文件,内容也会差不多。即使这个解决方案在我看来是可行的,但仅仅围绕路径查找工作似乎有点过分。测试1:您是对的,删除
.yo rc.json
只需修复错误的路径(使用$that.env.cwd和process.cwd().测试2:从文件前缀中删除
'app/views/'+
,再加上测试1的内容,使子生成器视图工作得很好。最后一步是用我自己的配置替换整个本机配置。谢谢!我在文件里漏掉了这个。这是正确的答案:)