Skip to content

下一代前端工具链 Vite

提示

Vite 内部使用的是 rollup 打包工具,而不是 webpack。

Vite 将会作为下一代的前端工具链,Vite 具有极速启动项目,轻量快速的热重载 HMR 等一系列功能。

现实问题

在此之前我们启动一个 Webpack 项目,Webpack 开发服务器都必须先将所有的源码、依赖项加载一遍并进行处理。

如果是小型项目可能没有太大感觉,当我们的项目越来越庞大的时候,这个处理和打包的时间可以要了我们的命。例如我们启动项目的时间可能要等上几分钟,当你修改了文件代码后,又要等待重新编译 10 秒左右才能在浏览器中反映出来。在一个开发模式下,如此的反复等待会极其得浪费我们的时间,大幅的降低了我们的开发效率和心态。

Module Script

Vite 最核心的部分就是利用了 Module Script 的特性,即 <script type="module">

目前大部分浏览器已经支持 ESM 模块化标准了,也就是说可以直接在浏览器中使用 ES6 语法。但是有以下前提条件。

  • ES6 代码必须写在 <script type="module"> 下才能生效。

  • 写了 <script type="module">.html 文件必须运行在服务端才可访问。


在此之前浏览器都是不支持的,所以就会涉及到 WebpackRollupParcel 等打包工具的使用,将我们的源代码进行处理和打包,甚至是语法降级,最终生成的代码能够在浏览器中运行。

Vite 就从此诞生了,Vite 会利用生态系统中的新特性解决以上问题,例如目前浏览器原生支持 ESM 模块化标准,就能省掉一部分的处理和打包工作。

新的主入口文件

在一个 Vite 项目中,index.html 是存在于项目的根目录中的。当你的项目运行或者打包时, Vite 会将该文件作为主入口文件,而不再是 src/main.ts

Vite 将会解析 <script type="module"> 或者是 <link rel="stylesheet"> 标签。例如将 TypeScript 转为 JavaScriptSass 转为 CSS、文件缓存等等一系列处理。

html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <link rel="icon" type="image/svg+xml" href="/vite.svg" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Vite + Vue + TS</title>
        <link rel="stylesheet" href="/src/styles/comm.scss" />
    </head>
    <body>
        <div id="app"></div>
        <script type="module" src="/src/main.ts"></script>
    </body>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <link rel="icon" type="image/svg+xml" href="/vite.svg" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Vite + Vue + TS</title>
        <link rel="stylesheet" href="/src/styles/comm.scss" />
    </head>
    <body>
        <div id="app"></div>
        <script type="module" src="/src/main.ts"></script>
    </body>
</html>