Vite — это инструмент для создания пакетов, разработанный Ю Юйси, автором vue.Сегодня основным моментом является то, что горячая загрузка и компиляция выполняются очень быстро во время локальной разработки, а в крупномасштабных проектах это лучше.
Разместите оригинальные слова автора на Weibo:
Vite, сервер разработки, основанный на импорте ES из браузера. Используйте браузер для анализа импорта, компиляции и возврата по запросу на стороне сервера, полностью пропуская концепцию упаковки, и сервер можно использовать по мере необходимости. При этом он не только поддерживает файлы Vue, но и обрабатывает горячие обновления, причем скорость горячих обновлений не будет замедляться по мере увеличения количества модулей. Для производственных сред тот же код можно упаковать с помощью свертки. Несмотря на то, что пока это относительно грубо, я думаю, что у этого направления есть потенциал, и если оно будет сделано хорошо, оно может полностью решить проблему полдня горячих обновлений, таких как изменение строки кода.
Из вышеизложенного видно, что:
- Основным соответствующим сценарием Vite является режим разработки, пропуск упаковки и загрузка по требованию, поэтому скорость горячего обновления очень высока;
- В крупномасштабных проектах это может эффективно повысить скорость локальной разработки, компиляции и упаковки, а также решить проблему «ожидания полдня для изменения строки кода»;
- Браузер анализирует импорт, использует функцию type="module", а затем перехватывает запрос импорта ES, отправленный браузером, и соответствующим образом обрабатывает его;
- Рабочий режим поставляется с накопительным пакетом, который в будущем должен быть оптимизирован;
1. Модульная функция современных браузеров
Будуscript
помеченtype
свойство установлено наmodule
, то в js можно использовать функцию модуля (import '**.js'
), совместимость es6 естьIE11
Не поддерживаются следующие: Из прокси Vue3 и модулей Vite видно, что Youda полностью отказался от IE.
<script type="module" src="main.js"></script>
<script type="module">
import { a } from './a.js'
</script>
2. Перехватывать http-запросы
Разная обработка для разных типов файлов
1. js-файл
Используйте es-module-lexer для анализа js, чтобы получить массив импорта (依赖分析
), затем замените синтаксис импорта файлом js, соответствующим запросу.
Оригинальный код:
<div id="app"></div>
<script type="module">
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
</script>
После преобразования:
<div id="app"></div>
<script type="module">
import { createApp } from '/@modules/vue'
import App from './App.vue'
createApp(App).mount('#app')
</script>
2. вью-файл
Трех нормельная сборка, включающая одно файловый Vuetemplate
,script
,style
, Vite разделит однофайловый компонент на три части для соответствующего запроса и обработки.
2.1 template
Вите будетtemplate
скомпилировано вrender
возврат после функции.
2.2 script
Проанализируйте зависимости импорта в js и повторно инициируйте запрос.
2.3 style
Скомпилируй стиль в css и вставь в шапку.
Исходный файл App.vue:
<template>
<h1>Hello Vite + Vue 3!</h1>
<p>Edit ./App.vue to test hot module replacement (HMR).</p>
<p>
<span>Count is: {{ count }}</span>
<button @click="count++">increment</button>
</p>
</template>
<script>
export default {
data: () => ({ count: 0 }),
}
</script>
<style scoped>
h1 {
color: #4fc08d;
}
h1, p {
font-family: Arial, Helvetica, sans-serif;
}
</style>
После конвертации получается:
// localhost:3000/App.vue
import { updateStyle } from "/@hmr"
// 抽出 script 逻辑
const __script = {
data: () => ({ count: 0 }),
}
// 将 style 拆分成 /App.vue?type=style 请求,由浏览器继续发起请求获取样式
updateStyle("c44b8200-0", "/App.vue?type=style&index=0&t=1588490870523")
__script.__scopeId = "data-v-c44b8200" // 样式的 scopeId
// 将 template 拆分成 /App.vue?type=template 请求,由浏览器继续发起请求获取 render function
import { render as __render } from "/App.vue?type=template&t=1588490870523&t=1588490870523"
__script.render = __render // render 方法挂载,用于 createApp 时渲染
__script.__hmrId = "/App.vue" // 记录 HMR 的 id,用于热更新
__script.__file = "/XXX/web/vite-test/App.vue" // 记录文件的原始的路径,后续热更新能用到
export default __script
3. Горячее обновление
Vite реализует горячее обновление через WebSocket.При изменении кода в браузер через веб-сокет отправляются только измененные файлы.
Таким образом, скорость локального горячего обновления Vite не будет сильно зависеть от размера проекта, а локальная разработка в крупных проектах выполняется быстро.
Код горячего обновления Vite на стороне клиента внедряется в файл app.vue в процессе компиляции.
4. Сравнение преимуществ и недостатков Vite и vue-cli
Преимущества интерфейса командной строки Vue | Недостатки Vue CLI |
---|---|
испытан в боях и надежен | Скорость сервера разработки обратно пропорциональна количеству зависимостей |
Совместимость с Вью 2 | |
Может связывать любые типы зависимостей | |
Экосистема плагинов | |
Может быть построен для разных целей |
Преимущества Вайт | Минусы |
---|---|
Сервер разработки в 10-100 раз быстрее, чем Webpack | Только для современных браузеров (ES2015+) |
Сделайте разделение кода приоритетом | Не полностью совместим с модулями CommonJS. |
В бета-версии поддерживает только Vue 3 | |
Самый маленький скаффолд не включает Vuex, маршрутизатор и т. д. | |
Различные серверы разработки и инструменты сборки |
V. Резюме
В настоящее время Vite обновляется с очень высокой скоростью, оптимизируя свои собственные функции, и можно ожидать будущего~