2017-06-20 47 views
1

我正在编写一个Ember自定义蓝图,该蓝图根据传递给ember g <blueprint> <modelname>命令的Ember数据模型输出不同的组件字段。在Blueprint使用过程中分析Ember模型文件

但是,试图将模型文件解析为Javascript很难。原因是我们在CommonJS Node环境中运行,试图导入ES6模块。即使我们使用从npm导入的ES6解析库,那么我们也无法从此上下文中解析模型的导入路径查找。

下一个方法是尝试导入dist文件夹中生成的Javascript文件(例如dist/my-first-blueprint.js)。这是针对模块的AMD结构,并且没有任何现成的AMD npm模块似乎也允许容易地使用该文件。

大概有代码添加到dist/vendor.js,允许Ember解析器找到正确引用的模块。然而,这正是我对西兰花搭建链和Ember内部知识的失败所在。

最后一个选项是使用模式匹配将Javascript文件解析为文本。通过mixin,不同的根类和其他差异的组合,这绝对是不平凡的,并且已经推迟到一个单独的蓝图。

有谁知道任何想法或提示如何,在蓝图的index.js文件中,我可以导入一个Ember数据模型并确定它的属性?

回答

1

您可以使用recast解析ast树。

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后,通过它来获取模型的属性。您可以使用ast traversal api

+0

谢谢你。我需要投入一些时间来尝试一下。它绝对有潜力,但它真的不是'将模型定义为对象'的答案,我一直在寻找。然而,这可能不可行。 – JonRed