parcel、rollup、vite 和 webpack 都是现代前端开发中核心的构建工具,用于将源代码打包成浏览器可运行的文件。webpack 是功能最全面的打包器,适合复杂应用;vite 基于原生 ES 模块,提供极速的开发体验;rollup 专注于库的打包,输出简洁;parcel 主打零配置,适合快速原型开发。它们都支持代码分割、热更新和插件扩展,但在配置复杂度、构建速度和适用场景上有显著差异。
parcel、rollup、vite 和 webpack 都是现代前端开发中核心的构建工具,用于将源代码打包成浏览器可运行的文件,但它们在设计理念和使用体验上差别很大。让我们从实际工程角度对比它们如何处理常见问题。
parcel 主打零配置,通常不需要编写配置文件。
package.json 中指定入口文件。// parcel: package.json
{
"source": "src/index.html",
"scripts": {
"dev": "parcel",
"build": "parcel build"
}
}
rollup 需要手动编写配置文件,但结构清晰。
rollup.config.js 定义输入输出。// rollup: rollup.config.js
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
}
};
vite 配置简单,基于 ES 模块。
vite.config.js,支持 TypeScript。// vite: vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
root: 'src',
build: { outDir: 'dist' }
});
webpack 配置最灵活,但也最复杂。
webpack.config.js,需要定义 entry、output、loaders 等。// webpack: webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: __dirname + '/dist'
}
};
parcel 内置开发服务器,启动速度快。
# parcel: 启动开发服务器
parcel src/index.html
rollup 本身不包含开发服务器,需配合插件。
rollup-plugin-serve 或外部工具。// rollup: 配合 serve 插件
import serve from 'rollup-plugin-serve';
export default {
plugins: [serve({ open: true, port: 3000 })]
};
vite 基于原生 ES 模块,启动极快。
# vite: 启动开发服务器
vite
webpack 使用 webpack-dev-server,启动较慢。
// webpack: devServer 配置
module.exports = {
devServer: {
static: './dist',
hot: true
}
};
parcel 自动优化,无需手动配置压缩。
# parcel: 生产构建
parcel build src/index.html
rollup 生成代码简洁,树摇效果最好。
// rollup: 生产配置
import terser from '@rollup/plugin-terser';
export default {
plugins: [terser()]
};
vite 生产环境使用 Rollup 打包。
// vite: 生产构建配置
export default defineConfig({
build: { minify: 'terser' }
});
webpack 提供最多的优化选项。
// webpack: 优化配置
module.exports = {
optimization: {
minimize: true,
splitChunks: { chunks: 'all' }
}
};
parcel 自动处理动态导入。
import() 并自动分割代码。// parcel: 动态导入
const module = await import('./heavy-module.js');
rollup 支持手动和自动分割。
manualChunks 配置控制分割策略。// rollup: 手动分割
export default {
output: {
manualChunks: {
vendor: ['lodash']
}
}
};
vite 自动优化依赖预打包。
// vite: 优化依赖
export default defineConfig({
optimizeDeps: { include: ['lodash'] }
});
webpack 提供最细粒度的控制。
SplitChunksPlugin 自定义规则。// webpack: 分割配置
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendor: { test: /[\\/]node_modules[\\/]/ }
}
}
}
};
parcel 插件系统较新,生态正在增长。
// parcel: .parcelrc
{
"extends": "@parcel/config-default",
"transformers": {
"*.ts": ["@parcel/transformer-typescript-tsc"]
}
}
rollup 插件生态成熟,专注于 JS 处理。
// rollup: 使用插件
import babel from '@rollup/plugin-babel';
export default {
plugins: [babel({ babelHelpers: 'bundled' })]
};
vite 兼容 Rollup 插件,生态增长快。
// vite: 使用插件
import react from '@vitejs/plugin-react';
export default {
plugins: [react()]
};
webpack 拥有最庞大的插件生态。
// webpack: 使用插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
plugins: [new HtmlWebpackPlugin()]
};
尽管存在差异,这四个工具在核心目标上是一致的。以下是它们的主要共同点:
// 所有工具都支持的标准导入
import { utils } from './utils.js';
/* 所有工具都能处理的样式导入 */
import './style.css';
// 所有工具都支持配置
// webpack: devtool: 'source-map'
// vite: build.sourcemap: true
// rollup: sourcemap: true
// parcel: 默认开启
// 所有工具都能处理的 TS 文件
const greet = (name: string) => `Hello ${name}`;
# 所有工具都有构建命令
npm run build
| 特性 | parcel | rollup | vite | webpack |
|---|---|---|---|---|
| 配置难度 | ⭐ 零配置 | ⭐⭐ 简单 | ⭐⭐ 简单 | ⭐⭐⭐⭐ 复杂 |
| 开发速度 | ⭐⭐⭐ 快 | ⭐⭐ 中等 | ⭐⭐⭐⭐ 极快 | ⭐⭐ 较慢 |
| 生产构建 | ⭐⭐⭐ 自动优化 | ⭐⭐⭐⭐ 代码简洁 | ⭐⭐⭐⭐ 基于 Rollup | ⭐⭐⭐⭐ 高度可配 |
| 适用场景 | 原型/小型项目 | 库/组件打包 | 现代前端应用 | 大型/遗留企业应用 |
| 插件生态 | ⭐⭐ 成长中 | ⭐⭐⭐ 成熟 | ⭐⭐⭐ 快速增长 | ⭐⭐⭐⭐ 最丰富 |
parcel 就像一辆自动挡汽车 🚗——适合不想操心机械细节,只想快速到达目的地的人。适合原型验证、小型站点或对构建流程无特殊要求的场景。
rollup 就像精密的手术刀 🔪——适合需要精准控制输出代码的库开发者。如果你发布 npm 包,它是首选工具。
vite 就像新一代电动跑车 ⚡——适合追求极致开发体验的现代前端应用。新项目默认推荐,尤其是 Vue/React 技术栈。
webpack 就像重型工业机床 🏭——适合需要处理复杂遗留系统或高度定制构建流程的企业。虽然配置繁琐,但能力无可替代。
核心思考:工具没有绝对的好坏,只有适合与否。对于新项目,优先考虑 vite;对于库开发,选择 rollup;对于复杂遗留系统,继续使用 webpack;对于快速验证,尝试 parcel。
选择 vite 如果你正在开发新的前端应用,尤其是基于 Vue、React 或 Svelte 的项目。它利用原生 ES 模块提供极速的冷启动和热更新,配置简单且生态增长迅速,是目前新项目的首选方案。
选择 rollup 如果你主要开发 JavaScript 库或组件包。它生成的代码更简洁,树摇(tree-shaking)效果更好,适合需要发布到 npm 的公共库。对于大型应用,它通常作为 Vite 的生产构建后端使用。
选择 webpack 如果你需要高度定制的构建流程,或者维护现有的大型遗留项目。它的插件生态最成熟,能处理各种复杂的资源加载和代码转换需求,适合对构建细节有严格控制的企业级应用。
选择 parcel 如果你希望零配置启动项目,不想花时间编写构建脚本。它适合快速原型、小型项目或对构建流程没有特殊定制需求的团队。它的默认设置已经覆盖了大多数常见场景,开箱即用。
Next Generation Frontend Tooling
Vite (French word for "quick", pronounced /viːt/, like "veet") is a build tool that aims to provide a faster and leaner development experience for modern web projects. It consists of two major parts:
A dev server that provides rich feature enhancements over native ES modules, for example extremely fast Hot Module Replacement (HMR).
A build command that bundles your code with Rolldown, pre-configured to output highly optimized static assets for production.
In addition, Vite is highly extensible via its Plugin API and JavaScript API with full typing support.