Дизайн апплета не полностью соответствует веб-спецификации, что приводит к расколу между экологией апплета и традиционной экологией веб-разработки, и большое количество превосходных веб-материалов не может быть непосредственно использовано для разработки апплета. Поэтому экология Таро долгое время была относительно слабой, а проблема нехватки выбора фреймворка пользовательского интерфейса глубоко беспокоила разработчиков.
С другой стороны, в отрасли имеется запас приложений H5, и в краткосрочной и среднесрочной перспективе по-прежнему будет существовать необходимость адаптации приложений H5 к апплету. Мы надеемся снизить стоимость переноса приложений H5 в апплет и даже запускать их непосредственно в апплете.
Команда Taro думала о том, как максимально повторно использовать веб-экосистему в среде мини-программ, и до рождения Taro 3.0 эта идея стала возможной. Далее будут представлены идеи и проблемы реализации изоморфизма H5 на основе Taro 3.0, и мы попытались адаптироваться к трем основным фреймворкам мобильного пользовательского интерфейса.WEUI,Ant Design Mobile,VantUIэкспериментальные результаты.
Во-первых, реализация идеи
Taro 3.0 — это перекрестная среда повторного выполнения, которая обеспечивает совместимость с средами веб-разработки, такими как React и Vue, путем имитации спецификации браузера и API DOM.
Теперь, когда существуют API-интерфейсы BOM и DOM для среды браузера, разрыв между приложениями Taro и веб-приложениями заключается в разнице между компонентами апплета и тегами HTML.
Поддержка рендеринга тегов H5.
Поток данных рендеринга Taro3 выглядит следующим образом:
Внешний фреймворк -> Taro DOM -> данные апплета
Имеются различия в именах тегов, атрибутах и событиях HTML-тегов и компонентов апплета, и интерфейсной платформе не нужно воспринимать эти различия.
Следовательно, нет необходимости изменять уровень адаптации интерфейсной платформы и слой Taro DOM.Taro DOM сериализуется в данные апплетаЭтот шаг делается для отображения.
1. Сопоставление имен тегов
Теги HTML имеют более низкую инкапсуляцию и более простые функции, чем компоненты мини-программы, и могут рассматриваться как подмножество компонентов мини-программы. Таким образом, теги HTML могут быть сопоставлены с компонентами апплета в соответствии с определенными правилами, такими как:
// Taro DOM 的序列化数据
{
nn: 'img'
}
// 映射结果
{
nn: 'image'
}
Полные правила сопоставления имен тегов см.:Приложение I RFC
2. Сопоставление атрибутов
Если атрибуты тегов HTML соответствуют атрибутам соответствующих компонентов апплета, они сопоставляются, например:
// Taro DOM 的序列化数据
{
nn: 'a',
href: 'xxx'
target: '_blank'
}
// 映射结果
{
nn: 'navigator',
url: 'xxx',
openType: 'navigate'
}
Полные правила сопоставления имен атрибутов см. в следующих разделах:RFC Приложение II
3. Картирование событий
Сопоставьте события, специфичные для HTML, с аналогичными событиями, обнаруженными на стороне апплета, например:
HTML-события | события компонента апплета |
---|---|
click | tap |
Полные правила сопоставления событий см. в следующих разделах:RFC Приложение III
стиль
1. Селектор тегов
Как упоминалось выше, мы сопоставим теги HTML с компонентами апплета, но селекторы тегов CSS, используемые в приложениях H5, будут недействительными.
Итак, Таро использует имя класса для имитации:
- Добавьте имена классов ко всем тегам H5:
h5-${tagName}
.
// 源代码
<div />
// 渲染结果
<view class="h5-div" />
- Используйте плагин postcss для обработки селекторов имен тегов:
// 标签名选择器
div {}
// 经 postcss 插件处理后变为类名选择器
.h5-div {}
2. Стиль браузера по умолчанию
Taro предоставляет два встроенных стиля браузера по умолчанию, которые можно напрямую импортировать:
-
@tarojs/taro/html.css
: встроенные стили W3C HTML4. Только стиль тега HTML4, небольшой размер, высокая совместимость могут адаптироваться к большинству ситуаций. -
@tarojs/taro/html5.css
: Chrome(Blink) встроенные стили HTML5. Встроенные стили богаты, включая большинство тегов HTML5, которые имеют большой размер и могут не поддерживать все контейнеры апплетов.
ограничение
В идеале красиво, а в реальности немного худощаво. Даже если Taro может реализовать BOM, DOM API, поддерживать использование HTML-тегов и т. д., в изоморфной схеме все равно остаются некоторые отличия, которые невозможно сгладить на уровне фреймворка. Вот некоторые основные ограничения:
1. Получить размер элемента
В H5 мы можем вызвать DOM API для синхронного получения размеров элемента:
// h5
const el = document.getElementById('#inner')
const res = el.getBoundingClientRect()
console.log(res)
Но в апплете API для получения размера элемента является асинхронным:
// 小程序
const query = Taro.createSelectorQuery()
query.select('#inner')
.boundingClientRect()
.exec(res => {
console.log(res)
})
Поэтому он несовместим с компонентами, которые используют синхронный API DOM для получения размеров элементов.
2. Различия API DOM
<canvas>
,<video>
,<audio>
и другие теги могут быть вызваны непосредственно на стороне H5HTMLElement
метод выше:
// h5
const el = document.getElementById('myVideo')
el.play()
Но в Таро для вызова нативного метода компонента нужно сначала создать соответствующийContext
:
// 小程序
const ctx = Taro.createVideoContext('myVideo')
ctx.play()
3. Ограничения по стилю
Некоторые стили или селекторы CSS не поддерживаются в апплете, например:
- подстановочный знак *
- запросы средств массовой информации
- Селектор атрибутов, если атрибут не является встроенным атрибутом соответствующего компонента апплета.
2. Как использовать
Обновите 3.3.0-альфа-версию
Сначала вам нужно установить инструменты CLI версии 3.3:
npm i -g @tarojs/cli@alpha
Затем зайдите в проект и поставьтеpackage.json
Версия связанных с таро зависимостей в файле изменена на^3.3.0-alpha.2
, а затем переустановить зависимости (рекомендуется ставитьnode_modulesудаление папки).
Установить плагин изоморфизма
Для экономии места в проекте функция изоморфизма не является обязательной и предоставляется в виде плагина Taro.
Во-первых, разработчику необходимо установить плагин@tarojs/plugin-html
:
npm i @tarojs/plugin-html
Затем настройте использование этого плагина:
// config/index.js
const config = {
// ...
plugins: [
'@tarojs/plugin-html'
]
}
3. Пример проекта
Чтобы проверить наличие и влияние изоморфизма, мыWEUI, Библиотека компонентов ReactAntd Design Mobile, библиотека компонентов Vue2VantUIВсе компоненты протестированы.
Эффект теста идеален и даже немного превосходит наши ожидания.Благодаря возможности загрузки по требованию каждой библиотеки компонентов он может использовать богатые компоненты в небольшом размере.Я полагаю, что эта функция понравится разработчикам.
WEUI
Адрес склада:taro-weui
WEUI — это библиотека стилей CSS, которая не зависит от фреймворка и обладает высокой совместимостью.Большинство компонентов можно использовать напрямую.
Antd Mobile Design
Адрес склада:taro-antd-mobile
Antd Mobile Design давно официально не поддерживается, и этот проект адаптации является экспериментальным.
Компоненты, которые могут быть непосредственно использованы, составляют около 80%.Основные проблемы:
- SVG широко используется в библиотеке компонентов и в настоящее время не поддерживается.
- Невозможно использовать некоторые компоненты, которым требуется синхронное получение размеров элементов.
VantUI
Адрес склада:taro-vant
Компоненты VantUI очень богаты, и компоненты, которые можно использовать напрямую, составляют около 70%. Некоторые разработчики будут использовать Vant Weapp в Taro, но Vant Weapp может работать только на апплете WeChat, поэтому прямая адаптация к VantUI является хорошим дополнением.
Основными проблемами, возникающими в процессе адаптации, являются:
- SVG ICON, встроенный в несколько компонентов, не может отображаться.
- Невозможно использовать некоторые компоненты, которым требуется синхронное получение размеров элементов.
- Vue
<transition>
Компоненты требуют дополнительной адаптации.
4. Инициатива совместного строительства
Схема изоморфизма все еще оптимизируется, и некоторые реализации еще не доработаны. Приглашаем всех разработчиков оставить сообщение на нашем форуме и высказать свое ценное мнение~:Изоморфная схема RFC.
Кроме того, многие из трех вышеупомянутых фреймворков веб-интерфейса в настоящее время являются несовместимыми компонентами, пока для среды апплета проводится небольшая работа по совместимости, их можно использовать. Экология фреймворка требует совместных усилий чиновника и сообщества для создания.Одна только команда Taro и рабочая сила из более чем 300 участников не могут поддерживать экологию всего сообщества. Мы надеемся, что эти три примера проектов совместимости могут сыграть свою роль в привлечении разработчиков к совместной разработке, улучшению вышеуказанных библиотек компонентов и даже постоянному внедрению дополнительных экологических библиотек на веб-сторону, чтобы упростить кросс-терминальную разработку. Жду вашего участия~