@vue/cli 和 create-react-app 分别是 Vue 和 React 生态中曾经最标准的官方脚手架工具,它们都基于 Webpack 构建,旨在为零配置启动项目提供便利。然而,随着前端构建技术的演进,两者目前均已进入维护模式或不再被官方推荐用于新项目。@vue/cli 官方建议新项目使用基于 Vite 的 create vue,而 React 官方文档现在推荐使用 Vite 或全栈框架(如 Next.js)代替 create-react-app。本文旨在从架构角度分析两者的技术细节、配置方式及现状,帮助开发者在维护旧项目或迁移技术栈时做出明智决策。
@vue/cli 和 create-react-app 曾经是前端工程化的基石,它们通过封装 Webpack 配置降低了入门门槛。但随着 Vite 等基于 ESBuild 和 Rollup 的新工具崛起,两者的局限性日益明显。本文将从架构现状、配置灵活性、构建性能及迁移路径四个维度进行深度对比。
@vue/cli 目前处于官方维护模式。
create vue(基于 Vite)。# vue/cli: 创建项目(旧方式)
vue create my-project
# vue: 官方推荐的新方式(Vite)
npm create vue@latest
create-react-app 已被 React 官方文档移除出推荐列表。
# create-react-app: 创建项目(旧方式)
npx create-react-app my-app
# react: 官方推荐的新方式(Vite)
npm create vite@latest my-app -- --template react
@vue/cli 提供相对开放的配置文件。
vue.config.js 直接修改 Webpack 配置。// vue/cli: vue.config.js
module.exports = {
configureWebpack: {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
}
};
create-react-app 默认隐藏所有配置。
eject(不可逆)或第三方工具如 craco。// create-react-app: craco.config.js (需额外安装)
module.exports = {
webpack: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
};
@vue/cli 受限于 Webpack 的启动速度。
// vue/cli: 启动开发服务器
npm run serve
// 大型项目可能耗时 5-10 秒启动
create-react-app 同样面临 Webpack 性能问题。
// create-react-app: 启动开发服务器
npm start
// 大型项目同样面临启动延迟
@vue/cli 迁移到 Vite 相对平滑。
create vue 重建。vue.config.js 转为 vite.config.ts。// vite.config.ts (Vue 迁移后)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: { '@': '/src' }
}
})
create-react-app 迁移到 Vite 需要更多调整。
public/index.html 结构。REACT_APP_ 变为 VITE_。// vite.config.ts (React 迁移后)
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
envPrefix: 'VITE_' // 注意环境变量前缀变化
})
尽管两者服务于不同框架,但作为同一时代的产物,它们有许多共同特征。
// 两者底层都依赖 Webpack 配置
// webpack.config.js (内部隐藏或暴露)
module.exports = {
entry: './src/index.js',
output: { filename: 'bundle.js' }
};
webpack-dev-server 的本地预览。# 两者都提供启动命令
npm run serve # Vue CLI
npm start # CRA
// 两者都支持直接运行测试
npm run test # 启动 Jest 监听模式
.env 文件管理环境变量。# .env 文件示例
VUE_APP_API_URL=https://api.example.com # Vue CLI
REACT_APP_API_URL=https://api.example.com # CRA
# 安装插件
vue add pwa # Vue CLI
# CRA 通常需手动安装库
npm install workbox-webpack-plugin # CRA
| 特征 | 共同点 |
|---|---|
| 构建工具 | 📦 Webpack 4/5 |
| 开发服务器 | 🛡️ webpack-dev-server |
| 测试框架 | 🧪 Jest |
| 环境变量 | 🌐 .env 文件支持 |
| 生态扩展 | 🔌 插件/手动安装库 |
| 特征 | @vue/cli | create-react-app |
|---|---|---|
| 官方状态 | ⚠️ 维护模式 | ⚠️ 不再推荐 |
| 配置灵活性 | ⚙️ 支持 vue.config.js | 🔒 隐藏配置,需 eject 或 craco |
| 推荐替代 | 🚀 create vue (Vite) | 🚀 create vite / Next.js |
| 环境变量前缀 | 🌐 VUE_APP_ | 🌐 REACT_APP_ |
| 迁移难度 | 🔁 中等 | 🔁 中高 |
@vue/cli 适合维护旧项目 — 但新项目请坚决转向 Vite。它的配置系统比 CRA 更开放,但在构建速度上已落后于时代。
create-react-app 仅适合历史遗留系统 — 它的“零配置”理念曾经先进,但现在变成了“无法配置”的负担。React 生态的未来在于 Vite 和全栈框架。
核心结论:两者都是特定历史阶段的优秀工具 — 但技术债务会随时间累积。对于新架构决策,请优先评估 Vite 生态,除非您有明确的遗留系统维护需求。
仅当您需要维护基于 Webpack 的旧版 Vue 2 或 Vue 3 项目时选择 @vue/cli。对于所有新项目,官方明确推荐使用基于 Vite 的 create vue 以获得更快的构建速度和更好的开发体验。如果您正在重构旧系统且必须保留原有的 Webpack 配置逻辑,这是唯一的选择。
仅当您需要维护现有的基于 Webpack 的 React 项目时选择 create-react-app。React 官方不再推荐将其用于新项目,建议改用 Vite 或 Next.js 等现代工具。如果您被锁定在旧的企业级项目中且无法轻易迁移构建工具,才考虑继续使用它。