Анализ файла модели Ember во время использования Blueprint

1

Я пишу специальный шаблон Ember, который выводит различные поля компонентов, основанные на модели данных Ember, переданной команде ember g <blueprint> <modelname>.

Однако, пытаясь разобрать файл модели, как Javascript трудно. Причина в том, что они работали в среде CommonJS Node, пытаясь импортировать модуль ES6. Даже если мы используем библиотеку синтаксического анализа ES6, импортированную из npm, тогда мы не можем разрешить поиск путей импорта модели из этого контекста.

Следующий подход состоял в том, чтобы попытаться импортировать сгенерированный файл Javascript в папку dist (например, dist/my-first-blueprint.js). Это структура AMD для модулей, и ни один из легко доступных модулей AMD npm позволяет легко использовать этот файл.

Предположительно, добавлен код, добавленный в dist/vendor.js который позволяет Ember Resolver находить модуль с правильной ссылкой. Тем не менее, это мое знание цепи сборки Брокколи и внутренних элементов Ember не дает мне возможности.

Последним вариантом является анализ файла Javascript в виде текста с использованием сопоставления с образцом. С комбинациями mixins, разных корневых классов и других дисперсий это определенно нетривиально и является тем, что было отложено на отдельный Blueprint.

Кто-нибудь знает какие-либо идеи или подсказки о том, как в файле index.js я могу импортировать модель Ember Data и определить ее атрибуты?

Теги:
ember.js
ember-data
ember-cli

1 ответ

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, пройдите через него, чтобы получить атрибуты модели. Вы можете использовать ави.

  • 0
    Спасибо за это. Мне нужно потратить некоторое время, чтобы попробовать это. У него определенно есть потенциал, но, честно говоря, это не был ответ «получи определение модели в объект», который я искал. Это может быть неосуществимым, однако.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню