vitejs预构建理解及流程解析

ViteJS 预构建理解及流程解析

简介

ViteJS 是一款基于 ES modules 构建的前端开发工具,它具有快速的开发速度和优秀的开发体验。其中,预构建是 ViteJS 的重点特性之一。

预构建,即根据源代码提前展开模块之间的依赖关系,以在后续的开发过程中减少许多不必要的耗时和额外请求。具体而言,预构建会将每个模块和它所依赖的模块转化为一个 JavaScript 文件,以便在应用程序运行时直接使用,而无需像传统打包工具在打包时进行代码分割。

流程

ViteJS 的预构建分为两个步骤:

  1. 从 HTML 文件中获取入口文件
  2. 分析入口文件的依赖关系,构建预构建文件

接下来,将对这两个步骤进行详细说明。

获取入口文件

在 ViteJS 中,入口文件通常是指在 HTML 文件中引入的 JavaScript 文件。ViteJS 通过查找 HTML 文件中的 script 标签,在其中查找 type 属性为 module 的标签作为入口文件。

在默认情况下,src/index.html 文件会做为默认入口文件进行处理,你也可以在 vite.config.js 中配置其他的 HTML 文件或特定的脚本文件。

分析入口文件的依赖关系,构建预构建文件

当 ViteJS 获取了入口文件之后,需要进行分析和预构建操作。分析过程通常由三个步骤完成:

  1. 识别依赖项
  2. 为每个模块创建动态 import 语句
  3. 合并相邻模块的依赖树

在分析完依赖项之后,ViteJS 将每个模块和它所依赖的模块部分预构建输出为单个 JavaScript 文件,以便于在浏览器中快速加载。

示例

示例1:加载公共模块

假设我们现在有一个 Vue 应用程序,其中多个 Vue 组件都使用了某些公共方法 utils.js。通过使用 ViteJS 的预构建特性,我们可以将 utils.js 提前合并为一个单独的供多个组件使用的 JavaScript 文件,以优化应用程序首次加载时间。

src/utils.js 文件中定义如下代码:

export function hello () {
  return "Hello ViteJS";
}

src/main.js 文件中,我们将使用 utils.js 文件中定义的方法。

import { hello } from './utils.js';
console.log(hello());

index.html 文件中,引入入口脚本文件。

<body>
  <script type="module" src="/src/main.js"></script>
</body>

通过运行 npm run dev 命令,我们可以启动 ViteJS,并应该可以在控制台中看到输出了 "Hello ViteJS" 信息。

示例2:延迟加载模块

假设我们现在有一个 Vue 应用程序,其中包含若干个组件,其中一些组件只有在特定条件下才会被加载并显示。使用传统的打包工具,这些组件通常会被打包在同一个文件中,如 app.js,导致许多不必要的加载时间。

通过使用 ViteJS 的预构建特性,我们可以将这些组件分离为单独的文件,并在需要时才进行加载。在此过程中,我们可以将这些组件作为动态 import 语句进行加载,在确保实际需要时才去执行相关操作,以在加载时间和性能方面达到最优化的目标。

src/components/LazyLoading.vue 组件文件中定义如下代码:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  data() {
    return { message: 'Lazy Loaded' }
  }
}
</script>

src/components/EagerLoading.vue 组件文件中定义如下代码:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  data() {
    return { message: 'Eager Loaded' }
  }
}
</script>

src/main.js 文件中,我们将通过路由控制,延迟加载 LazyLoading 组件,并立即载入 EagerLoading 组件。

import { createRouter, createWebHistory } from 'vue-router';

const routerHistory = createWebHistory();
const routes = [
  {
    path: '/',
    component: () => import(/* webpackChunkName: "eager_layout" */ './layouts/EagerLoading.vue'),
    children: [
      {
        path: '/lazy-loading',
        component: () => import(/* webpackChunkName: "lazy_loading" */ './components/LazyLoading.vue')
      }
    ]
  }
]

const router = createRouter({
  history: routerHistory,
  routes: routes
})

app.use(router)

启动 ViteJS,完成路由跳转之后,我们可以看到 "Lazy Loaded" 和 "Eager Loaded" 信息分别在路由切换时异步加载并展示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vitejs预构建理解及流程解析 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue项目中轮询状态更改方式(钩子函数)

    在 Vue 项目中,轮询状态更改是一种经常使用的操作,它可以帮助我们动态地更新组件中的数据。Vue 提供了一系列钩子函数,我们可以使用这些钩子函数来实现轮询操作。 以下是实现轮询状态更改的完整攻略: 创建一个定时器 我们可以使用 setInterval() 方法来创建一个定时器,定期执行某个函数。在 Vue 中,我们可以在 mounted() 钩子函数中创建…

    Vue 2023年5月28日
    00
  • Vue实现自定义字段导出EXCEL的示例代码

    下面我将详细讲解“Vue实现自定义字段导出EXCEL的示例代码”的完整攻略。 1. 使用第三方库 实现Vue自定义字段导出Excel的方式,可以使用一些第三方库,例如FileSaver.js,xlsx等。通过使用这些库,我们可以将Vue实例中的表格数据导出为Excel表格。 2. 导出Excel代码 以下是一个简单的Vue组件,它展示了如何使用xlsx和Fi…

    Vue 2023年5月27日
    00
  • iview日期控件,双向绑定日期格式的方法

    要实现iview日期控件的双向绑定,可以通过给日期控件的value属性绑定一个日期变量,然后使用v-model实现双向绑定。同时,可以通过设置picker-options属性来自定义日期控件的显示格式。 以下是具体的步骤: 步骤一:安装iview 首先要在你的项目中安装iview,可以使用npm或者yarn进行安装。如果你的项目已经安装了iview,则可以直…

    Vue 2023年5月29日
    00
  • vue 如何实现表单校验

    下面是 “Vue 如何实现表单校验” 的完整攻略。 使用 Vue.js 实现表单校验 Vue.js 做为一款流行的前端框架,提供了很好的表单校验的支持。Vue.js 2.x 版本提供了 “v-model” 指令和 “validate” 方法,可以让我们快速方便地实现表单校验。 下面将介绍两个示例,来详细讲解 Vue.js 如何实现表单校验。 示例一:基础校验…

    Vue 2023年5月27日
    00
  • vue 页面回退mounted函数不执行的解决方案

    1.问题描述 当 Vue 页面回退时,如果使用了 keep-alive 组件进行缓存,再次进入该页面时,mounted 钩子函数不会执行。这是因为使用了 keep-alive 缓存组件,导致页面并未被销毁,因此再次进入页面时不会触发 mounted 钩子函数。 2.解决方案 方法一:使用 activated 钩子函数 当使用缓存组件时,在页面再次进入前会触发…

    Vue 2023年5月28日
    00
  • 分享几个可以助你提高效率的Vue指令

    下面是关于“分享几个可以助你提高效率的Vue指令”的完整攻略: 1. 什么是Vue指令 Vue指令是Vue框架中非常重要的一部分。指令可以用在DOM元素、组件、模板中,用于将特定的行为绑定到HTML元素上。Vue提供了一些内置指令,如v-if、v-on等,同时也可以自定义指令,以适应不同的应用场景。 2. 分享几个可以提高效率的Vue指令 2.1 v-clo…

    Vue 2023年5月29日
    00
  • vue实现水波涟漪效果的点击反馈指令

    Vue 是一个流行的现代 JavaScript 框架,它提供了丰富的动画和效果特性,其中之一就是在用户点击元素时显示水波涟漪效果。本攻略将介绍如何在 Vue 中实现这一效果。 步骤一:安装依赖 要实现水波涟漪效果,我们需要使用一个名为 Vuetify 的 UI 框架,它已经包含了这一特性。因此,安装 Vuetify 是必要的。 首先,我们需要安装 Vueti…

    Vue 2023年5月28日
    00
  • vue.js实现三级菜单效果

    当使用vue.js框架时,实现三级菜单效果需要多个步骤。以下是其中的几个关键步骤: 步骤一:定义Vue实例中的数据结构 定义一个vue实例,包含一个数组,数组每个元素表示一个菜单项,该数组每个元素还包含以下属性: id:唯一标识该菜单项,每个菜单项的id值必须唯一。 name:表示该菜单项的名称。 children:表示该菜单项包含的子菜单,该属性的值同样是…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部