Мы недалеко от первой официальной версии генераторов кода, но между тем имейте в виду, что некоторые части экосистемы являются экспериментальными.
teleportHQ — это платформа с низким кодом, которая позволяет командам создавать приложения через знакомый интерфейс инструмента проектирования в режиме реального времени.
В этом репозитории хранятся генераторы кода, которые используются в визуальном редакторе платформы.
Связующим звеном между платформой и генераторами кода является стандарт UIDL . UIDL определяет пользовательские интерфейсы абстрактным образом, независимо от какой-либо инфраструктуры или даже самой веб-платформы. Начиная с UIDL, вы можете преобразовать эту абстракцию в различные варианты кодирования (например, React, Vue, WebComponents и т. д.).
Эти генераторы кода являются частью более крупной экосистемы, которую мы активно создаем, стремясь упростить создание веб-приложений. Подробнее о нашем создании вы можете прочитать в этой статье.
Философия генераторов кода такова:
React
, также можно создать с помощью Vue
или поверх стандарта Web Components
— мы поддерживаем несколько целей.Узнайте больше о стандарте UIDL.
Самый простой способ окунуться в экосистему телепортов — опробовать один из предварительно настроенных генераторов компонентов :
npm install @teleporthq/teleport-component-generator-react
npm install @teleporthq/teleport-component-generator-vue
npm install @teleporthq/teleport-component-generator-angular
или с помощью пряжи:
yarn add @teleporthq/teleport-component-generator-react
yarn add @teleporthq/teleport-component-generator-vue
yarn add @teleporthq/teleport-component-generator-angular
Для создания простого компонента вам нужно начать с UIDL компонента :
{
"name" : " My First Component " ,
"node" : {
"type" : " element " ,
"content" : {
"elementType" : " text " ,
"children" : [
{
"type" : " static " ,
"content" : " Hello World! "
}
]
}
}
}
Использовать предварительно настроенные генераторы компонентов так же просто, как вызвать асинхронную функцию:
import ReactGenerator from '@teleporthq/teleport-component-generator-react'
const uidl = { ... } // your sample here
const { files } = await ReactGenerator . generateComponent ( uidl )
console . log ( files [ 0 ] . content )
Вывод консоли будет примерно таким:
import React from 'react'
const MyFirstComponent = ( props ) => {
return < span > Hello World! < / span >
}
export default MyFirstComponent
Для других фреймворков просто переключите пакет:
import VueGenerator from '@teleporthq/teleport-component-generator-vue'
const uidl = { ... } // your sample here
const { files } = await VueGenerator . generateComponent ( uidl )
console . log ( files [ 0 ] . content )
Вывод консоли будет примерно таким:
< template >
< span >Hello World!</ span >
</ template >
< script >
export default {
name : ' MyFirstComponent ' ,
}
</ script >
Вы можете поиграть со структурой UIDL, а также наблюдать за сгенерированным кодом в онлайн-REPL. Там же можно посмотреть разные примеры компонентов, написанных в формате UIDL.
Экосистема телепорта состоит из трёх основных категорий пакетов: генераторы компонентов , генераторы проектов и упаковщики проектов .
У нас есть официальные генераторы компонентов для нескольких популярных фреймворков веб-интерфейса. Ознакомьтесь с официальной документацией для более глубокого понимания архитектуры генераторов компонентов.
Все генераторы компонентов предоставляют экземпляр пакета teleport-component-generator
. Вы также можете установить этот пакет и создать свой собственный генератор с плагинами, сопоставлениями и постпроцессорами.
В документации вы найдете полное руководство по созданию генератора собственных компонентов.
teleport-component-generator-react
— со стилями: css-modules
, styled-components
, styled-jsx
и т. д.teleport-component-generator-vue
— создание стандартных файлов .vue
teleport-component-generator-angular
— генерирует файлы .ts
, .html
и .css
teleport-component-generator-html
- (экспериментальный)teleport-component-generator-svelte
- (скоро) Вот список функций, которые UIDL и генераторы компонентов поддерживают на данный момент, помимо очевидного уровня представления:
Генераторы проектов полагаются на входные данные ProjectUIDL
и стратегию проекта . ProjectUIDL
будет содержать всю информацию о маршрутизации, страницах, компонентах и глобальных настройках. Стратегия сообщит генераторам, куда поместить каждый файл и какой генератор компонентов использовать.
Генераторы выведут абстрактную структуру с папками и файлами, ничего не записывая на диск. Упаковщику проекта поручено взять выходные данные генератора проекта и опубликовать их где-нибудь.
Ознакомьтесь с официальными руководствами о том, как использовать существующий генератор проектов или как создать свою собственную конфигурацию.
teleport-project-generator-react
— react
+ react-router
и css-modules
поверх create-react-app
teleport-project-generator-next
— на основе Next.jsteleport-project-generator-vue
— со структурой, начинающейся с vue-cli
teleport-project-generator-nuxt
— на основе Nuxt.jsteleport-project-generator-angular
— на основе angular-cli
teleport-project-generator-html
(экспериментальный) Помимо обычных файлов и папок, создаваемых в конце процесса, генераторы проектов также заботятся о:
package.json
.index.html
или что-то специфичное для платформы). Как только генератор создаст код для компонентов и страниц, упаковщик проекта возьмет этот результат, поместит его поверх существующего шаблона проекта , добавит все необходимые локальные ресурсы и затем передаст весь результат издателю . Издатели специализируются на развертывании всей структуры папок сторонним организациям, таким как vercel
или github
, либо на создании zip
файла в памяти, либо просто на записи папки на disk
.
teleport-publisher-vercel
teleport-publisher-github
teleport-publisher-codesandbox
teleport-publisher-zip
teleport-publisher-disk
teleport-publisher-netlify
(скоро)Несколько полезных ссылок, которые помогут вам освоить всю экосистему телепорта :
В этом проекте используются:
Чтобы придать ему локальный характер, мы рекомендуем использовать yarn
, поскольку он лучше интегрируется с lerna
, и все участники его используют:
yarn
Это устанавливает зависимости в корневой папке, а также создает символические ссылки между независимыми модулями внутри папки packages
.
Для завершения настройки лерны необходимо запустить:
yarn build
Это запустит задачу build
внутри каждого отдельного пакета, создав выходную папку lib
. У нас есть два вывода для каждого пакета: cjs
— общие модули стиля js и esm
— современные модули es. Если вы хотите ускорить время сборки, вы можете просто запустить build:cjs
чтобы избежать сборки esm
.
Запуск набора тестов:
yarn test
yarn test:coverage
Кроме того, в папке lerna есть private
пакет под названием teleport-test
. Эти пакеты можно использовать для тестирования процесса генерации кода/файла с помощью любого генератора проекта/компонента. Чтобы его покрутить, вам придется:
cd packages/teleport-test
npm run standalone
Автономная версия использует пакет teleport-code-generator
и статически объявленные шаблоны. Чтобы протестировать шаблоны GitHub и собственный экземпляр упаковщика, вам необходимо:
cp config.example.json config.json
Вам придется заменить заполнитель своим собственным токеном GitHub. Затем вы можете запустить его с помощью:
npm run packer
Эта версия упаковщика использует UIDL из файла examples/uidl-sample
. Если процесс завершится успешно, вы увидите ответы от упаковщика проекта в формате: { success: true, payload: 'dist' }
. Задача использует пакет teleport-publisher-disk
и генерирует четыре разных файла проекта в папке dist
.
Пожалуйста, открывайте проблему в случае любых нарушений, потенциальных ошибок, которые вы обнаружите во время работы, или если у вас просто есть какие-либо вопросы или любопытство по поводу этого проекта.
Это не только наш код с открытым исходным кодом, мы также планируем разработку генераторов кода на GitHub. У нас есть ряд открытых вопросов, и мы ожидаем дальнейшего вклада по этому вопросу.
Мы особенно заинтересованы в открытии дискуссий по вопросам, отмеченным ярлыком discussion
.
Официальным релизом станет переход на версию 1.0
. Расчетное время для этого примерно в конце 2019 года.
Мы были бы очень рады участию сообщества в этом проекте. Мы твердо верим в силу открытого исходного кода , поэтому планируем создавать лучшие генераторы кода вместе со всем сообществом разработчиков.
С этого момента мы предусматриваем различные типы участия:
Спасибо этим замечательным людям (ключ смайлика):
Алекс Молдован ? | Влад Никула ? | Пол Бри ? ? | Михайтаба ? | Михай Сербан | Джая Кришна Намбуру ? | Анамария Орос |
овидиуионут94 | Алекспаусан | Михай Сампаляну ? | Утво | АндрейТну | Ксавье Казалот | Чавда Бхавик |
Элиза Нитой | ТюдорЦе ? | Дороттья Ференц ? | Уильям Гуно |
Этот проект соответствует спецификации всех участников. Любой вклад приветствуется!
Свяжитесь с нами по любому из этих каналов: