我正在编写一个Ember自定义蓝图,根据传递给ember g <blueprint> <modelname>
命令的Ember数据模型输出不同的组件字段。
但是,尝试将模型文件解析为Javascript很难。原因是我们在尝试导入ES6模块的CommonJS Node环境中运行。即使我们使用从npm
导入的ES6解析库,我们也无法从此上下文中解析模型的导入路径查找。
下一个方法是尝试在dist文件夹中导入生成的Javascript文件(例如dist/my-first-blueprint.js
)。这是模块的AMD结构,并且现有的AMD npm
模块都不允许轻松使用此文件。
据推测,dist/vendor.js
中添加了一些代码,允许Ember Resolver找到正确引用的模块。然而,这是我对Broccoli构建链和Ember内部构件的了解让我失望的地方。
最后一个选项是使用模式匹配将Javascript文件解析为文本。通过mixins,不同的根类和其他方差的组合,这绝对是非平凡的,并且已被推迟到单独的蓝图。
有没有人知道有关如何在Blueprint的index.js
文件中导入Ember数据模型并确定其属性的任何想法或提示?
答案 0 :(得分:1)
您可以使用recast
来解析树。
var fs = require('fs-extra');
var fileName = <path-to-model> ;
var source = fs.readFileSync(fileName, 'utf-8');
var recast = require('recast');
var ast = recast.parse(source);
此代码可以解析文件。在你得到它之后,通过它来获得模型的属性。您可以使用ast traversal api。