【发布时间】:2018-05-30 17:18:28
【问题描述】:
我有自己的 Yeoman 生成器。
我创建了一个子生成器来创建一个新的 view 文件夹。
基本上,用法是:
- 打开一个新终端
- cd 进入父文件夹
- 运行yeoman命令
yo my-generator:view - 按照说明进行操作
这个视图子生成器提示一个文件夹名称。
例如:
如果我想在默认的 views 目录上创建视图 authentication。
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 库
类似:
各位,你们知道如何获取当前文件夹路径吗?
这里有替代解决方案吗?
谢谢!
编辑 1:
这里的问题是项目根目录中的.yo-rc.json。
该文件重写了路径,因此我应该将其删除以解决问题。
但是,如果我删除此文件,将不再保存用户配置。
我需要它供以后的子生成器使用。
还有其他方法可以保存用户配置吗?
或者再一次,有没有其他方法可以得到当前的真实路径?
【问题讨论】:
标签: node.js path generator yeoman yeoman-generator