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组件七种通信方式”的完整攻略。 1. 父子组件通信 父子组件是指在Vue组件树结构中,父级组件通过props将数据传递给子组件,子组件通过$emit触发事件来通知父组件。 父组件中定义: <template> <child-component :msg="parentMsg" @upda…

    Vue 2023年5月27日
    00
  • 一篇文章带你搞懂VUE基础知识

    一篇文章带你搞懂VUE基础知识攻略 简介 Vue.js 是一个轻量级的渐进式 JavaScript 框架,用于构建交互式的前端用户界面。本文的目的是通过简单易懂的方式,帮助初学者快速了解 Vue.js 的基础知识。 前置知识 HTML 基础知识 JavaScript 基础知识 安装 Vue.js 可以通过 CDN 直接引入,也可以通过 NPM 安装。 CDN…

    Vue 2023年5月27日
    00
  • 程序员应该知道的vuex冷门小技巧(超好用)

    程序员应该知道的vuex冷门小技巧(超好用) 什么是Vuex Vuex是一个专为Vue.js应用程序开发的状态管理模式,可以集中管理Vue.js应用程序中的各种数据,并使不同组件间的数据共享变得更加便捷。 Vuex冷门小技巧 1. 使用vuex-map-fields轻松实现表单双向绑定 在实现表单数据双向绑定时,我们通常需要手动编写 computed 属性来…

    Vue 2023年5月27日
    00
  • 深入解读VUE中的异步渲染的实现

    深入解读VUE中的异步渲染的实现 Vue中的异步渲染主要是采用了Next Tick机制,将数据的变化尽可能异步处理,从而防止同步过程中出现性能问题。 Next Tick 的实现 Next Tick 是指在下一次事件循环之前执行的操作。Vue 中使用了 microtask(微任务) 实现 Next Tick 机制。在具体实现中,使用了 setImmediate…

    Vue 2023年5月28日
    00
  • Vue webpack的基本使用示例教程

    Vue webpack的基本使用示例教程 简介 在Web应用程序中,Vue是一种常用的JavaScript框架。Webpack是一个常用的打包工具,它可以将应用程序中的各种组件打包到一个JavaScript文件中,方便部署。 本教程将介绍如何使用Vue和Webpack来构建Web应用程序。 安装Node.js 在使用Webpack之前,需要先安装Node.j…

    Vue 2023年5月28日
    00
  • 如何根据业务封装自己的功能组件

    首先,关于如何封装自己的功能组件,一般需要遵循以下几个步骤: 确定功能组件所需的基础数据类型和参数:在组件开发之前,需要确定组件所需要的基础数据类型和参数。这些数据类型和参数应该能够满足组件需要使用和展示的数据。 设计组件的API:根据所需的基础数据类型和参数,设计组件的API。API应该是清晰和易于理解的,并且允许使用者很容易地使用组件。 编写组件的代码:…

    Vue 2023年5月28日
    00
  • 详解Vue之事件处理

    详解Vue之事件处理 Vue.js 是一款流行的前端框架,它的事件处理能力非常强大。本文将详细讲解 Vue.js 中的事件处理,包括如何使用 v-on 指令绑定事件、如何传递参数和修饰符、以及如何使用自定义事件等。 绑定事件 在 Vue.js 中,我们可以使用 v-on 指令来绑定事件。省略了 v-on 直接写 @ 符号,作用相同,下面的几个示例中直接使用 …

    Vue 2023年5月27日
    00
  • 使用vue中的v-for遍历二维数组的方法

    使用vue中的v-for可以快速方便地遍历数组,但是遍历二维数组需要一些特殊的处理方法。以下是遍历二维数组的方法: 方法一:使用两个嵌套的v-for循环 我们可以使用两个嵌套的v-for循环来遍历二维数组。外层循环遍历一维数组,内层循环遍历二维数组,这样可以逐个输出二维数组的每个元素。 <div v-for="(oneDimensionalA…

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