《三十一》开发模式构建工具 Vite

本文介绍了Vite,一种快速提升前端开发体验的构建工具,强调其利用ESModule、HMR、ESBuild等特性,以及与Webpack的区别,展示了Vite处理ES6+、TypeScript、Vue和React等技术的高效方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于 Vite4。

在实际开发中,编写的代码往往是不能被浏览器直接识别的,例如 ES6+、React、Vue、TypeScript 等,必须通过构建工具来对代码进行转换、编译,例如 Webpack、Rolluop、Vite 等。

Vite:下一代前端开发与构建工具,能够显著地提升前端开发体验。

Vite 的构成:

Vite 主要由两部分构成:

  1. 一个开发服务器:基于原生的 ESModule 提供了丰富的內建功能,HMR 的速度非常快。
  2. 一套构建指令:基于 Rollup 打包代码,可以打包输出优化过的静态资源。

    可以对已有项目单独安装并使用 Vite;也可以直接使用 npm init vite 命令来创建一个基于 Vite 的项目。

Vite 和 Webpack 的区别:

  1. 启动速度:相比 Webpack 来说,Vite 启动速度更快。Webpack 需要先解析依赖、打包构建再启动开发服务器;Vite 在一开始将应用中的模块区分为依赖和源码两类,提高本地开发服务器的启动速度。
    • 依赖:在首次启动 Vite 时,Vite 会使用 ESBuild 构建工具预构建项目中的依赖,并且会对它们进行强制缓存,因此一旦被缓存它们将不需要再次请求。

      这么做的目的是:

      1. CommonJS 和 UMD 兼容性: 在开发阶段中,Vite 的开发服务器将所有代码视为原生 ES 模块。因此,Vite 必须先将以 CommonJS 或 UMD 形式提供的依赖项转换为 ES 模块。
      2. 性能: Vite 将那些具有许多内部模块的 ES 依赖项转换为单个模块。有些包将它们的 ES 模块构建为许多单独的文件,彼此导入,例如,lodash-es 有超过 600 个内置模块,当执行 import { debounce } from 'lodash-es' 时,浏览器会同时发出 600 多个 HTTP 请求,即使服务器能够轻松处理它们,但大量请求会导致浏览器端的网络拥塞,使页面加载变得明显缓慢,通过将 lodash-es 预构建成单个模块,现在我们只需要一个HTTP请求。
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    • 源码:利用浏览器已经原生支持 ESModule,Vite 遇到 import 就发送一个 HTTP 请求去按需加载加载文件,而不需要加载整个项目;Vite 会启动一个 Connect 服务器拦截这些请求,使用 ESBuild 构建工具动态生成转换后的 ESModule 代码返回给浏览器;且还会对其进行协商缓存。也就是说,Vite 只需要在浏览器请求源码时才进行转换并按需提供源码,而不需要提前解析依赖、打包构建后再启动开发服务器。

      Vite2 之前是使用 koa 来搭建服务器;Vite2 及之后是使用 Connect 来搭建服务器。

      // src/utils/index.ts
      export const dateFormat = (date: string) => {
        return `日期为:${date}`
      }
      
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
  2. 更新速度:当某个模块内容改变时,Webpack 需要重新对其进行打包构建;而 Vite 只需要让浏览器去重新请求该模块即可。
  3. 配置方式:相比 Webpack 来说,Vite 配置简单。不再需要去配置 HMR,默认已经支持了;不再需要去配置各种 Loader,默认已经支持了对各种文件的转换(例如 JSX、TypeScript、CSS、CSS 预处理器、文件等);预设了开启本地服务器、打包、预览等命令。

ESBuild 构建工具:

Vite 使用 ESBuild 作为默认的构建工具。 ESBuild 主要用于将现代 JavaScript、TypeScript、CSS 等浏览器不理解的或需要转换的代码,转换成浏览器能够理解的、向后兼容的代码。

Vite 和 Webpack 是一类工具,ESBuild 和 Babal 是一类工具。

为什么 ESBuild 构建速度超快?

  1. ESBuild 是使用 Go 语言编写的,可以直接转换成机器代码,而无需经过字节码。
  2. ESBuild 可以充分利用 CPU 的多内核,尽可能让它们饱和运行:ESBuild 会单独开一个进程,在这个进程中会尽可能地多开线程,多个线程是可以跑在多个 CPU 内核中,因此就可以并行执行。
  3. ESBuild 的所有内容都是从零开始编写的,没有使用第三方库,所以从一开始就考虑了各种性能问题。

Vite 的构建指令:

使用 Vite 开启本地服务:

  1. 新建 vite-demo 文件夹,并且运行 npm init -y 命令初始化项目。

  2. 新建 src/index.js 文件,并编写代码。

    console.log('index')
    
  3. 新建 index.html 文件,并编写代码。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script src="./src/index.js" type="module"></script>
    </body>
    </html>
    
  4. 安装 Vite:npm install vite -D

  5. 运行 npx vite 命令,Vite 会将当前根目录下的 index.html 文件作为入口文件,开启一个本地服务器,并且支持热替换。

    Vite 开启本地服务会比 Webpack 快很多。

    请添加图片描述
    在这里插入图片描述

使用 Vite 打包代码:

  1. 运行 npx vite build 命令打包上面的代码,会发现,打包输出到了 dist 文件夹下。
    请添加图片描述

使用 Vite 预览打包后的代码:

如果想要预览打包后的代码的效果,可以运行 npx vite preview 命令,将会开启一个本地服务并运行打包后的文件。

必须先运行 npx vite build 命令打包代码,才可以使用 npx vite preview 命令进行预览。

使用 Vite 处理各种类型的文件:

使用 Vite 处理 CSS 样式:

Vite 原生支持 CSS、CSS 预处理,还有 PostCSS 的转换,不需要额外做什么配置。

CSS:
  1. 新建 src/css/index.css 文件,并编写代码。
    body {
      background-color: red;
    }
    
  2. src/index.js 文件中将其引入。
    import './css/index.css'
    console.log('index')
    
  3. 运行 npx vite 命令,会发现使用 Vite 进行的话,不需要针对 CSS 文件做什么配置,直接编译成功了,Vite 会创建一个 <style></style> 标签将 CSS 内联到 HTML 文件中。 在这里插入图片描述
    在这里插入图片描述
Less:
  1. 安装 Less:npm install less -D
  2. 新建 src/css/index.less 文件,并编写代码。
    @bg: blue;
    body {
      background-color: @bg;
    }
    
  3. src/index.js 文件中将其引入。
    import './css/index.less'
    console.log('index')
    
  4. 运行 npx vite 命令,会发现使用 Vite 进行的话,不需要针对 Less 文件做什么配置,直接编译成功了。
    在这里插入图片描述
PostCSS:
  1. 安装 PostCSS 和 PostCSS 的预设:npm install postcss postcss-preset-env -D
  2. 新建 postcss.config.js 文件,并编写配置信息。
    module.exports = {
      plugins: [
        require('postcss-preset-env')
      ]
    }
    
  3. 新建 src/css/index.css 文件,并编写代码。
    body {
      user-select: none;
    }
    
  4. src/index.js 文件中将其引入。
    import './css/index.css'
    console.log('index')
    
  5. 运行 npx vite 命令,会发现使用 Vite 进行的话,不需要针对 PostCSS 做什么配置,PostCSS 就已经生效了。
    在这里插入图片描述

使用 Vite 处理 TypeScript 代码:

Vite 原生支持 TypeScript,不需要额外做什么配置。

  1. 新建 src/utils.ts 文件,并编写代码。
    export const dateFormat = (date: string) => {
      return `日期为:${date}`
    }
    
  2. src/index.js 中将其引入。
    import {dateFormat} from './utils/index.ts'
    console.log(dateFormat('1999-10-10'))
    
  3. 运行 npx vite 命令,会发现编译成功了。
    在这里插入图片描述

使用 Vite 处理图片:

Vite 原生支持对图片的处理,不需要额外做什么配置。

  1. src/images/ 文件夹下放入一张图片。
  2. src/index.js 文件中将其引入。
    import likeImg from './images/like.jpg'
    const img = document.createElement('img')
    img.src = likeImg
    document.body.appendChild(img)
    
  3. 运行 npx vite 命令,会发现编译成功了。
    在这里插入图片描述

使用 Vite 处理 Vue 文件:

Vite 对 Vue 提供了第一优先级的支持:通过 @vitejs/plugin-vue 插件实现 Vue3 单文件组件的支持;通过 @vitejs/plugin-vue-jsx 插件实现对 Vue3 JSX 的支持;通过 vite-plugin-vue2 插件实现对 Vue2 的支持。

  1. 安装 Vue2:npm install vue@2
  2. 新建 src/js/App.vue 文件并编写代码。
    // src/js/App.vue
    <template>
    	<div>{{title}}</div>
    </template>
    
    <script>
      export default {
        data() {
          return {
            title: 'Hello Vue'
          }
        }
      }
    </script>
    
    <style scoped></style>
    
  3. 新建 src/index.js 文件,并编写代码。
    // src/index.js
    import Vue from 'vue'
    import App from './js/App.vue'
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    
  4. 新建 index.html 文件,并编写代码。
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
      <script src="./src/index.js" type="module"></script>
    </body>
    </html>
    
  5. 运行 npx vite 命令进行打包,会发现报错了,Vite 无法转换 Vue 文件。
    在这里插入图片描述
  6. 安装 vite-plugin-vue2 插件用来处理 Vue 文件:npm install vite-plugin-vue2 -D
  7. 新建 vue.config.js 文件,并编写配置。
    import {createVuePlugin} from 'vite-plugin-vue2'
    
    export default {
      plugins: [
        createVuePlugin(),
      ]
    }
    
  8. 运行 npx vite 命令进行打包,会发现打包成功了。
    在这里插入图片描述

使用 Vite 处理 React 文件:

Vite 原生支持 JSX 语法,不需要额外做什么配置。但是文件必须以 .jsx 为后缀,否则 Vite 不知道需要处理的是 JSX 语法。

  1. 安装 React 和 ReactDOM:npm install react react-dom
  2. 新建 src/index.jsx 文件,并编写代码。
    // src/index.jsx
    import React from 'react'
    import ReactDOM from 'react-dom'
    
    class App extends React.Component {
        state = {
            title: 'Hello World',
        }
        render() {
            return (
                <div>{this.state.title}</div>
            )
        }
    }
    
    ReactDOM.render(<App/>, document.getElementById('app'))
    
  3. 新建 index.html 文件,并编写代码。
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
      <script src="./src/index.jsx" type="module"></script>
    </body>
    </html>
    
  4. 运行 npx vite 命令,会发现打包成功了。
    在这里插入图片描述
### Vite 是什么? Vite 是一种现代化的前端构建工具,专为提升开发体验和构建性能而设计。它利用了浏览器原生支持的 ES 模块(ESM)功能,在开发阶段实现了快速启动和即时热更新,而在生产环境则通过打包优化输出高效的代码[^1]。 与传统的构建工具Webpack 相比,Vite 的主要优势在于其极快的冷启动速度和高效的模块热替换(HMR),这使得在开发过程中能够显著提升工作效率。同时,Vite 对 TypeScript、CSS 预处理器、JSX、以及 Vue 和 React 等主流框架都提供了开箱即用的支持[^2]。 --- ### 安装与初始化 Vite 项目 要创建一个基于 Vue 的 Vite 项目,可以通过以下步骤进行: ```bash # 使用 npm 创建项目 npm create vite@latest my-vue-app --template vue # 或者使用 yarn yarn create vite my-vue-app --template vue # 进入项目目录并安装依赖 cd my-vue-app npm install # 启动开发服务器 npm run dev ``` 此命令将生成一个基础的 Vue 项目结构,并配置好 Vite 开发环境所需的依赖。 --- ### 配置 Vite Vite 的核心配置文件是 `vite.config.js`,该文件用于定义插件、别名、代理设置等。例如,添加 Vue 插件以支持 `.vue` 文件的解析: ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()] }) ``` 此外,还可以根据需要引入其他插件,比如用于处理 CSS 预处理器或集成第三方库的插件[^1]。 --- ### 使用 Vue 插件 Vite 提供了官方插件 `@vitejs/plugin-vue` 来支持 Vue 项目的开发。该插件不仅支持单文件组件(SFC)的编译,还兼容 Vue 3 的 Composition API 和响应式语法糖。 对于使用 TypeScript 的 Vue 项目,还需额外安装 `@vitejs/plugin-vue-jsx` 插件以支持 JSX 语法: ```bash npm install -D @vitejs/plugin-vue-jsx ``` 然后在 `vite.config.js` 中添加相应的插件配置。 --- ### 优化生产环境构建 在生产环境中,Vite 使用 Rollup 进行打包,提供高效的代码压缩和 Tree Shaking 功能,从而减少最终打包体积。可以通过修改 `vite.config.js` 来进一步优化构建输出,例如启用 CSS 分割、指定输出路径等: ```javascript export default defineConfig({ build: { outDir: 'dist', assetsDir: 'assets', minify: 'terser', sourcemap: false } }) ``` 上述配置将禁用源码映射并使用 Terser 压缩器来减小 JavaScript 文件大小[^1]。 --- ### 集成第三方库 Vite 支持通过自动导入机制简化第三方库的使用。例如,使用 `unplugin-auto-import` 插件可以实现无需手动导入即可调用常用函数: ```bash npm install -D unplugin-auto-import ``` 然后在 `vite.config.js` 中添加: ```javascript import AutoImport from 'unplugin-auto-import/vite' export default defineConfig({ plugins: [ AutoImport({ imports: ['vue', 'vue-router'] }) ] }) ``` 这样可以在组件中直接使用 `ref`, `reactive`, `useRouter` 等 API 而无需显式导入[^1]。 --- ### 实际开发中的使用技巧 #### 环境变量 Vite 支持通过 `.env` 文件管理环境变量。例如,在 `.env.development` 文件中定义: ``` VITE_API_URL=https://dev-api.example.com ``` 然后在代码中通过 `import.meta.env.VITE_API_URL` 获取该值。 #### 代码分割 Vite 利用动态导入(`import()`)实现按需加载模块,从而提高应用的初始加载速度。例如: ```javascript const lazyComponent = () => import('./components/LazyComponent.vue') ``` 上述代码将在运行时按需加载 `LazyComponent.vue`。 #### 使用 TypeScript 结合 Vue 开发的最佳实践 为了更好地支持 TypeScript,建议在 `tsconfig.json` 中启用 `strict` 模式,并使用 Vue 的类型系统增强组件声明: ```json { "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "moduleResolution": "node", "esModuleInterop": true, "skipLibCheck": true, "outDir": "./dist" }, "include": ["src/**/*"] } ``` 同时,使用 `<script setup>` 语法可以更简洁地编写响应式逻辑和组合式 API。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值