Skip to content

chibivue? Где тут chibi!? Он слишком большой, я не могу с этим справиться!

Он большой...

Тем, кто так подумал, я искренне приношу свои извинения.

Перед тем, как взять эту книгу, вы, возможно, представляли себе что-то меньшее.

Позвольте мне немного оправдаться, даже я не планировал делать его таким большим.

По мере того, как я продолжал работать над ним, я находил это занятным и думал: "О, может быть, стоит добавить эту функциональность следующей?" И вот так всё и получилось.

Понятно. Давайте установим ограничение по времени.

Одним из факторов, из-за которых он стал слишком большим, было то, что "не было ограничения по времени".

Поэтому в этом приложении я попытаюсь реализовать его за "15 минут".

Конечно, я также ограничу объяснение всего одной страницей.

Более того, не только страница, но и "сама реализация будет содержаться в одном файле" - это цель, которой я попытаюсь достичь.

Однако, даже если это один файл, бессмысленно писать 100 000 строк в одном файле, поэтому я буду стремиться реализовать его менее чем в 150 строках.

Название - "Hyper Ultimate Super Extreme Minimal Vue".

О названии

Я думаю, многие люди подумали, что название довольно детское.

Я тоже так думаю.

Однако для этого названия есть веская причина.

Подчеркивая, что он чрезвычайно маленький, я хотел сделать аббревиатуру, поэтому получился такой порядок слов.

Аббревиатура - "HUSEM Vue (Воздушный шарик Vue)".

"HU-SEN" [fuːsen] означает "воздушный шарик" на японском.

Хотя я буду реализовывать это очень небрежно, я сравниваю эту небрежность с "воздушным шариком", который лопнет, если даже иголка коснется его.

Ты же просто собираешься реализовать систему реактивности, верно?

Нет, это не так. На этот раз я попытаюсь перечислить, что будет реализовано за 15 минут.

  • create app api
  • Virtual DOM
  • patch рендеринг
  • Система реактивности
  • компилятор шаблонов
  • sfc компилятор (vite-plugin)

Я буду реализовывать эти вещи.

Другими словами, SFC будет работать.

Что касается исходного кода, я предполагаю, что будет работать следующее:

vue
<script>
import { reactive } from 'hyper-ultimate-super-extreme-minimal-vue'

export default {
  setup() {
    const state = reactive({ count: 0 })
    const increment = () => state.count++
    return { state, increment }
  },
}
</script>

<template>
  <button @click="increment">state: {{ state.count }}</button>
</template>
ts
import { createApp } from 'hyper-ultimate-super-extreme-minimal-vue'

// @ts-ignore
import App from './App.vue'

const app = createApp(App)
app.mount('#app')

Released under the MIT License.