前端打包工具webpack和Vite

我们见证了 webpack、Rollup 和 Parcel 等工具的变迁,它们极大地改善了前端开发者的开发体验。

但当我们开始构建越来越大型的应用时,通常需要很长时间才能启动开发服务器,文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率。

Vite 旨在利用生态系统中的新进展解决上述问题:浏览器开始原生支持 ES 模块,且越来越多 JavaScript 工具使用编译型语言编写


一、Vite是什么?

Vite(法语意思是 “快”)是一种全新的前端构建工具。可以把它理解为一个开箱即用的开发服务器 + 打包工具的组合,类似webpack + webpack-dev-server,但是更轻更快。
Vite 利用浏览器原生的 ES 模块支持和用编译到原生的语言开发的工具(如 esbuild)来提供一个快速且现代的开发体验。

二、Vite优点是什么

💡 极速的服务启动
使用原生 ESM 文件,无需打包!
⚡️ 轻量快速的热重载
无论应用程序大小如何,都始终极快的模块热重载(HMR)
🛠️ 丰富的功能
对 TypeScript、JSX、CSS 等支持开箱即用
📦 优化的构建
可选 “多页应用” 或 “库” 模式的预配置 Rollup 构建
🔩 通用的插件
在开发和构建之间共享 Rollup-superset 插件接口
🔑 完全类型化的API
灵活的 API 和完整 TypeScript 类型

三、Vite与Webpack对比

Webpack 和 Vite 同是打包工具,有什么区别呢?

Webpack

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTprgulz-1652187994764)(https://pic6.zhuanstatic.com/zhuanzh/3c5e142c-31e9-4e33-bde9-2c6eb26acea6.jpg)]

Webpack 会遍历你的应用程序中的所有文件,并将代码转换成开发服务器,Webpack 将整个代码渲染到一个开发环境中。

  • webpack从一个entry.js文件开始,将其依赖的所有js或者其他assets通过loader打包成一个的文件, 随后这个打包后的文件将被从server传递到客户端浏览器运行。

  • 因为这样处理规则,当保存文件时,整个 JavaScript 包将由 Webpack 重新构建,这就是为什么更改可能需要长达 10 秒才能反映在浏览器中,更新速度会随着应用体积增长而直线下降。

Vite

在这里插入图片描述

Vite 的工作方式不同,它不会遍历整个应用程序,Vite 只是转换当时正在使用的文件/模块。

  • Vite的核心理念:非打包开发构建

  • Vite 的核心思想:浏览器请求它时,使用 ES 模块转换并提供一段应用程序代码。

  • 开始开发构建时,Vite将首先将的JavaScript 模块分为两类:依赖模块和源码模块。

  • 依赖项模块是第三方依赖的代码,从node_modules文件夹中导入的JavaScript 模块。这些模块将使用esbuild进行处理和捆绑,esbuild是一个用 Go 编写的 JavaScript 打包工具,执行速度比 Webpack 快 10-100 倍。

  • 源码模块是源代码,即业务代码,通常涉及特定库的扩展,如、.jsx或.vue文件.scss。

  • 它使用基于路由的代码拆分来了解代码的哪些部分实际需要加载,因此,它不必重新打包所有内容。

  • 它还使用现代浏览器中的原生 ES 模块支持来交付代码,这让浏览器可以在开发中承担打包工作。

  • 在生产方面,虽然现在所有主流浏览器都支持原生 ES 模块,但它实现了诸如 tree-shaking、延迟加载和通用块拆分等性能优化技术,仍然比非打包应用程序带来更好的整体性能。出于这个原因,Vite附带了一个预先配置的build命令,该命令使用Rollup打包来打包和实现各种性能优化。

Webpack 这样的基于打包器的工作流必须在单个浏览器请求之前处理整个 JavaScript 模块,但 Vite 只在单个浏览器请求之前处理依赖模块。这就是为什么 Vite 能够比 Webpack 更快地处理开发构建。

四、Storybook对Webpack和Vite的测试

Storybook是行业标准的 UI 组件工作室。全球数以千计的应用程序和设计系统团队大部分时间都在 Storybook 中工作——构建、记录和测试他们的 UI 组件。因此,Storybook 需要尽可能快地运行项目。Webpack 是 Storybook 的默认构建器。

为了比较这Vite和Webpack两个构建器的性能,他们选择针对Carbon Design System运行基准测试。

本文从原文中截取了Webpack 5.0 和 Vite的差异,还有 Webpack 4/Webpack 5(lc/cs)/Vite(cs)的差异对比,可以到原文中详细阅读~

对比项如下:

场景Webpack 5.0Vite差异
开发(冷启动)61s103sVite首页加载时速度较慢。
是因为Vite 将每个模块未捆绑发送到浏览器,
因此即使开发服务器快速启动,但是浏览器也需要更多时间来下载和处理所有这些请求
生产构建时间77s96sVite 比 Webpack 需要更长的时间来打包资源
Vite 不是为单个模块提供服务,而是将所有内容打包在一起,在底层,它使用 Rollup 来完成
生产构建加载的大小和时间11.6M9.4MRollup打包的结果会把Dead Code一些无用的代码以及一些不可达的代码清除掉,
webpack打包的结果这些代码依然存在,打包体积也大
所以Vite生产打包加载速度会稍微快一些
重建时间(热模块重新加载)3.67s0.53s以上Vite并没有z展示出真正的优点,
真正的优势是保存时在浏览器中查看更改的近乎即时的反馈

以上是Storybook对项目使用Vite和Webpack不同构建工具的性能的差异测试,可以看出来Vite的真正闪光点在于,开发时浏览器接近实时反馈的效果。

五、Vite 入门

我们浅显的学习一下Vite和Vue3.0创建一个项目,Vite支持流行的前端库,包括 React、Vue 和 Svelte。

  1. vite+ts+vue3,执行以下命令
npm init @vitejs/app vite-test-app --template vue-ts
  1. 配置路由
npm install vue-router@4 --save
  1. 在src下新建router目录,新建index.ts文件
import {createRouter, createWebHashHistory} from 'vue-router';

const routes = [
    {
        path: '/',
        name: 'home',
        component: () => import('@/views/Home.vue')
    },
    {
        path: '/:pathMatch(.*)*',
        name: '404',
        redirect: '/'
    },
]
const router = createRouter({
    history: createWebHashHistory(),
    routes
});
router.beforeEach((to, from, next) => {
    //如果设置标题就显示,没设置使用默认
    if (null != to.meta && null != to.meta.title && '' !== to.meta.title) {
        document.title = to.meta.title || import.meta.env.VITE_APP_TITLE;
    } else {
        document.title = import.meta.env.VITE_APP_TITLE;
    }
    //正常放行
    next();
});

export default router;
  1. main.ts挂载路由
import { createApp } from 'vue'
import App from './App.vue'
import router from "./router";
createApp(App)
.use(router)
.mount('#app')
  1. 配置数据中心vuex
npm i vuex@next --save
  1. 配置网络请求axios
    在src创建utils文件夹,并在utils下创建axios.ts
npm i -s axios
  1. 配置请求代理
    vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';

export default defineConfig({
  plugins: [vue()],
  base:"./",//打包路径
  resolve: {
    alias:{
      '@': path.resolve(__dirname, './src')//设置别名
    }
  },
  server: {
    port: 80,
    host: '0.0.0.0',
    https: false,
  },
})

页面展示:
在这里插入图片描述

以上,一个vite+ts+vue3最基本的移动端开发配置完成。

总结

  1. Vite 是新一代的 JavaScript 构建工具,通过使用基于 ESM 的工作流程进行本地开发,确保开发服务器即使在处理大型 JavaScript 应用程序时也能保持快速。
  2. Vite 还提供了一个合理的生产构建配置,可以处理基于库的语法,如 JSX、Vue 和 TypeScript。
  3. 通过在底层使用 Rollup,确保生产构建实现性能优化技术,如 tree-shaking、延迟加载和常见的块拆分。

虽然 Webpack 仍然是许多流行应用程序的默认 JavaScript 构建工具,有很多扩展和一个非常庞大的开发者社区,鉴于社区的积极反馈,Vite 很有可能成为未来最受欢迎的选择,但是在社区可以中看到很多新库或框架,有多快或多好并不重要,重要的是社区如何采用它。

参考文献:
https://cn.vitejs.dev/
https://webpack.docschina.org/concepts/
https://betterprogramming.pub/is-vite-the-killer-of-webpack-a515d9e77a4
https://blog.bitsrc.io/vite-is-better-than-webpack-d5dd59610d56
https://storybook.js.org/blog/storybook-performance-from-webpack-to-vite/
https://gitee.com/WeiziPlus/muteki-vite
https://radixweb.com/blog/webpack-vs-vitejs-comparison
https://zhuanlan.zhihu.com/p/351888882

### Webpack Vite 的基础配置方法及使用教程 #### 一、Webpack 基础配置 Webpack 是一种模块打包工具,主要用于将多个模块化的文件打包成一个或几个最终的静态资源文件。以下是 Webpack 的基本配置: ##### 配置文件 `webpack.config.js` ```javascript const path = require('path'); module.exports = { mode: 'development', // 设置为 development 或 production entry: './src/index.js', // 入口文件路径 output: { filename: 'bundle.js', // 输出文件名 path: path.resolve(__dirname, 'dist'), // 输出目录 }, module: { rules: [ { test: /\.js$/, // 匹配 .js 文件 exclude: /node_modules/, // 排除 node_modules 目录 use: { loader: 'babel-loader', // 使用 Babel 进行转译 options: { presets: ['@babel/preset-env'], // 转换 ES6+ 语法 }, }, }, { test: /\.css$/, // 匹配 .css 文件 use: ['style-loader', 'css-loader'], // 加载 CSS }, ], }, }; ``` - 上述配置中设置了入口文件出口文件的位置,并通过 `rules` 定义了如何处理不同类型的文件[^3]。 --- #### 二、Vite 基础配置 Vite 是新一代前端构建工具,利用原生 ESM 提升开发体验。相比 Webpack,它的初始配置更为简洁。 ##### 配置文件 `vite.config.js` ```javascript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; // 如果是 Vue 项目需引入插件 export default defineConfig({ plugins: [vue()], // 注册插件 server: { port: 3000, // 设置服务器端口号 open: true, // 启动时自动打开浏览器 }, build: { outDir: 'dist', // 构建后的输出目录 rollupOptions: { input: { main: './index.html', // 主页面入口 }, }, }, }); ``` - Vite 默认支持 ES Module 导入,因此无需额外安装像 Babel 这样的工具来转换现代 JavaScript 语法[^1]。 --- #### 三、两者的基础使用流程 ##### Webpack 使用流程 1. 创建项目并初始化 npm: ```bash mkdir my-webpack-project && cd my-webpack-project npm init -y ``` 2. 安装 Webpack 及相关依赖: ```bash npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env css-loader style-loader ``` 3. 编写 `webpack.config.js` 并运行命令: ```bash npx webpack --config webpack.config.js ``` ##### Vite 使用流程 1. 创建项目并初始化 npm: ```bash mkdir my-vite-project && cd my-vite-project npm init -y ``` 2. 安装 Vite: ```bash npm install --save-dev vite ``` 3. 编写 `vite.config.js` 并启动服务: ```bash npx vite ``` --- ### 四、两者的区别与适用场景 | 特性 | Webpack | Vite | |------------------|------------------------------------------|-----------------------------------------| | **性能** | 在冷启动时较慢,适合复杂项目的生产环境 | 利用本地模块解析,热更新更快 | | **易用性** | 需要手动配置较多选项 | 更加开箱即用 | | **生态成熟度** | 生态更完善 | 新兴技术,部分功能仍在发展中 | | **适用场景** | 复杂应用、需要高度定制化 | 快速原型开发、中小型项目 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值