2017-06-20 59 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

相關問題