在蓝图使用期间解析Ember模型文件

时间:2017-06-20 16:01:59

标签: javascript ember.js ember-data ember-cli

我正在编写一个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数据模型并确定其属性的任何想法或提示?

1 个答案:

答案 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