import { createApp, defineComponent } from 'chibivue'const App = defineComponent({ template: ` <!-- this is header. --> <header>header</header> <!-- this is main. main content is here! --> <main>main</main> <!-- this is footer --> <footer>footer</footer>`,})const app = createApp(App)app.mount('#app')
Что касается того, как реализовать комментарии, на первый взгляд кажется, что мы можем просто игнорировать их при парсинге.
Однако в Vue комментарии, написанные в шаблоне, выводятся в HTML как есть.
Другими словами, комментарии также должны быть отрендерены, поэтому необходимо иметь представление в VNode, и компилятор также должен выводить этот код. Кроме того, необходима операция для генерации узла комментария.
Реализация комментариев
Целевой интерфейс разработчика
В дальнейших объяснениях нет необходимости.
Реализация AST и Parser
Что касается того, как реализовать комментарии, на первый взгляд кажется, что мы можем просто игнорировать их при парсинге.
Однако в Vue комментарии, написанные в шаблоне, выводятся в HTML как есть.
Другими словами, комментарии также должны быть отрендерены, поэтому необходимо иметь представление в VNode, и компилятор также должен выводить этот код. Кроме того, необходима операция для генерации узла комментария.
Сначала давайте реализуем AST и parser.
AST
Parser
Пока что давайте выбрасывать ошибку.
Генерация кода
Добавим VNode, который представляет Comment в runtime-core.
Реализуем функцию под названием createCommentVNode и выставим ее как helper.
В codegen генерируем код, который вызывает createCommentVNode.
Рендеринг
Давайте реализуем рендерер.
Как обычно, добавим ветвь для случая Comment в patch и сгенерируем комментарий при монтировании.
Что касается patch, поскольку он статический в этот раз, я не буду делать ничего особенного. (В коде это просто присваивание как есть.)
Ну, вы должны были реализовать комментарии к этому моменту. Давайте проверим фактическую работу!
Исходный код до этого момента: GitHub