vitejs预构建理解及流程解析

yizhihongxing

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的组件化开发中,组件之间的通讯是必不可少的。Vue提供了多种组件通讯方法,包括: 父子组件通讯:父组件通过props向子组件传递数据,子组件通过emit触发事件向父组件传递数据。 兄弟组件通讯:通过一个共同的父组件来实现兄弟组件通讯,即父组件先接收兄弟组件的数据…

    Vue 2023年5月27日
    00
  • 手把手教你用VUE封装一个文本滚动组件

    让我们逐步介绍如何用Vue封装文本滚动组件。 1. 创建Vue组件 首先,我们需要创建一个Vue组件,在这个组件中实现文本滚动的功能。 <template> <div class="scroll-container"> <div class="scroll-content" ref=&qu…

    Vue 2023年5月29日
    00
  • 简单谈谈Vue 模板各类数据绑定

    下面我就来详细讲解“简单谈谈Vue 模板各类数据绑定”的完整攻略。 什么是Vue模板数据绑定 Vue.js是一个用于构建用户界面的渐进式JavaScript框架,可以轻松地实现数据与模板的双向绑定,让数据的变化自动更新到视图中,从而简化了前端开发的流程。其中,模板数据绑定就是Vue.js最为重要而且基本的特性之一。 模板数据绑定主要有以下几种方式: 1.插值…

    Vue 2023年5月27日
    00
  • 详解VueJS 数据驱动和依赖追踪分析

    让我们来详细讲解一下VueJS数据驱动和依赖追踪。 什么是数据驱动 在VueJS中,数据驱动是指视图(DOM)是由数据(Data)来驱动的,即数据的变化引起视图的更新。这是通过VueJS中的观察者(Observer)实现的。 在VueJS中,观察者是被绑定到数据上的。当数据变化时,观察者会观察到变化,并通知视图进行更新。 什么是依赖追踪 在VueJS中,凡是…

    Vue 2023年5月27日
    00
  • vue如何根据url下载非同源文件

    我可以给你详细讲解一下vue如何根据url下载非同源文件的完整攻略: 1. axios下载文件 通过axios来下载非同源文件是常见的做法。具体操作步骤如下: 引入axios库 首先需要在vue项目中引入axios库。 import axios from ‘axios’; 下载文件 然后通过axios发起get请求,通过responseType设置返回的数据…

    Vue 2023年5月27日
    00
  • Vue-cli打包后如何本地查看的操作

    当你使用Vue-cli进行前端开发时,你可以在本地使用devServer插件启动一个本地服务器进行开发调试,但是在打包完成后,你可能需要查看打包后的文件在本地的运行效果。下面我来分享一下如何在本地查看Vue-cli打包后的文件。 1. 打包Vue-cli应用 首先,你需要使用Vue-cli将你的应用进行打包。你可以使用以下命令进行打包: npm run bu…

    Vue 2023年5月27日
    00
  • 用VueJS写一个Chrome浏览器插件的实现方法

    当我们要用VueJS编写Chrome浏览器插件时,需要考虑的主要问题是如何将VueJS代码与Chrome插件API集成。下面是实现步骤的完整攻略: 步骤一:创建一个新的Chrome插件 首先,我们需要在Chrome浏览器中创建一个新的Chrome插件项目,可以使用Chrome浏览器扩展程序模板代码来加速开发。这里以一个新标签页替换Chrome默认新标签页为案…

    Vue 2023年5月27日
    00
  • Vue中使用Printjs插件实现打印功能

    下面是Vue中使用Printjs插件实现打印功能的完整攻略: 一、安装Printjs插件 在使用Printjs插件前,需要先进行安装。打开终端,进入你的Vue项目根目录,并输入以下命令: npm install print-js –save 该命令会自动将Printjs插件安装到你的项目中。 二、使用Printjs插件实现打印功能 在需要打印的组件中引入P…

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