@angular/cli、@microsoft/rush、create-react-app 和 vue-cli 都是用于初始化、构建和管理前端项目的工具,但它们的适用范围和维护状态截然不同。@angular/cli 是 Angular 框架的官方命令行工具,提供完整的项目生成和构建能力。@microsoft/rush 是一个专注于大型仓库(Monorepo)管理的工具,适用于包含多个项目的复杂结构。create-react-app 曾是 React 社区的标准脚手架,但目前已停止维护。vue-cli 是 Vue 2 和早期 Vue 3 项目的官方脚手架,目前处于维护模式,官方推荐转向 Vite。
@angular/cli、@microsoft/rush、create-react-app 和 vue-cli 都在前端开发历史上扮演过重要角色,但它们的定位和当前状态差异巨大。有些是框架专用的构建工具,有些是仓库管理器,有些则已退出历史舞台。让我们从工程实践的角度深入对比它们。
在选择工具之前,了解其生命周期至关重要。这直接影响项目的长期可维护性。
@angular/cli 处于活跃维护状态。
# angular/cli: 检查版本
g ng version
@microsoft/rush 处于活跃维护状态。
# rush: 检查版本
$ rush --version
create-react-app 已正式归档(Deprecated)。
# create-react-app: 初始化(不推荐)
$ npx create-react-app my-app
vue-cli 处于维护模式(Maintenance)。
# vue-cli: 初始化(仅限旧项目)
$ vue create my-project
初始化的命令和生成的文件结构决定了开发的起点。
@angular/cli 生成完整的 Angular 工作区。
# angular/cli: 创建新项目
g ng new my-app --routing --style=scss
@microsoft/rush 初始化一个 Monorepo 根目录。
common、projects 文件夹和核心配置文件。# rush: 初始化仓库
$ rush init
create-react-app 生成标准的 React 单页应用。
src、public 目录和默认构建配置。# create-react-app: 创建 React 应用
$ npx create-react-app my-app
vue-cli 生成 Vue 项目结构。
# vue-cli: 创建 Vue 项目
$ vue create my-project
配置文件的处理方式影响自定义构建流程的灵活性。
@angular/cli 使用 angular.json 集中配置。
// angular/cli: angular.json
{
"projects": {
"my-app": {
"architect": {
"build": { "options": { "outputPath": "dist/my-app" } }
}
}
}
}
@microsoft/rush 使用 rush.json 管理仓库策略。
// rush: rush.json
{
"projects": [
{ "packageName": "my-app", "projectFolder": "projects/my-app" }
]
}
create-react-app 隐藏配置,支持 package.json 简单覆盖。
eject(不可逆,不推荐)。// create-react-app: package.json
{
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build"
}
}
vue-cli 使用 vue.config.js 进行链式配置。
// vue-cli: vue.config.js
module.exports = {
configureWebpack: {
output: { filename: 'js/[name].js' }
}
}
日常开发中最常用的命令是启动本地服务和生产打包。
@angular/cli 提供 ng serve 和 ng build。
# angular/cli: 开发与服务
g ng serve
g ng build --configuration production
@microsoft/rush 通过 rush build 协调子项目。
# rush: 构建所有项目
$ rush build
$ rush rebuild
create-react-app 使用 npm start 和 npm run build。
react-scripts 中。# create-react-app: 启动与构建
$ npm start
$ npm run build
vue-cli 使用 vue-cli-service serve 和 build。
# vue-cli: 服务与构建
$ vue-cli-service serve
$ vue-cli-service build
这是 @microsoft/rush 与其他三个工具最大的区别点。
@angular/cli 支持工作区(Workspace)多项目。
# angular/cli: 生成库
g ng generate library my-lib
@microsoft/rush 专为大型 Monorepo 设计。
# rush: 更新依赖链接
$ rush update
$ rush link
create-react-app 仅支持单应用。
# create-react-app: 无多项目命令
# 需手动管理多个文件夹
vue-cli 主要面向单应用。
# vue-cli: 无原生多项目管理命令
# 需手动配置 vue.config.js 多入口
尽管定位不同,这些工具在基础功能上有重叠。
npm 或 yarn 安装包。package.json 中管理脚本。// 所有工具共用 package.json 结构
{
"dependencies": { "react": "^18.0.0" },
"devDependencies": { "typescript": "^5.0.0" }
}
npm run 提供简化的命令。// 通用启动方式
$ npm start
$ npm run build
// 所有工具都支持构建产物输出
$ npm run build
# 输出到 dist/ 或 build/ 目录
| 特性 | @angular/cli | @microsoft/rush | create-react-app | vue-cli |
|---|---|---|---|---|
| 状态 | ✅ 活跃维护 | ✅ 活跃维护 | ❌ 已归档/弃用 | ⚠️ 维护模式 |
| 适用框架 | Angular | 任意 (Monorepo) | React | Vue |
| 多项目管理 | ✅ 支持工作区 | ✅ 专为 Monorepo 设计 | ❌ 单应用 | ❌ 单应用为主 |
| 构建速度 | 🚀 快 (Webpack) | 🚀 快 (增量构建) | 🐢 慢 (Webpack) | 🐢 慢 (Webpack) |
| 配置灵活性 | ⚙️ 中等 (angular.json) | ⚙️ 高 (策略控制) | 🔒 低 (隐藏配置) | ⚙️ 中等 (vue.config.js) |
| 推荐场景 | Angular 企业应用 | 大型多包仓库 | ❌ 不推荐新项目 | ⚠️ 仅旧 Vue 项目 |
@angular/cli 是 Angular 开发者的唯一选择 — 它稳定、功能完整且官方支持。如果你的技术栈是 Angular,无需犹豫。
@microsoft/rush 是大型团队管理复杂仓库的利器 — 当你需要协调几十个包和应用,且需要严格的版本控制和增量构建时,它是最佳选择。但它不适合单个小项目。
create-react-app 已成历史 — 尽管它曾经很简单,但现在它的构建速度慢且不再更新。新 React 项目请选择 Vite 或 Next.js。
vue-cli 已进入生命周期末期 — 对于 Vue 3 项目,官方强烈推荐 create-vue (基于 Vite)。仅在维护旧版 Vue 2 项目时考虑使用它。
核心结论:工具的选择不仅看功能,更要看生态趋势。对于新项目,优先选择活跃维护且符合现代构建标准(如 Vite、Turbopack)的工具,避免技术债务。
选择 @angular/cli 如果你正在开发 Angular 应用。它是官方维护的工具,与 Angular 框架深度集成,提供路由、服务、组件生成的完整支持,适合企业级单应用或多项目仓库中的 Angular 子项目。
选择 @microsoft/rush 如果你需要管理包含多个包或应用的大型仓库(Monorepo)。它擅长处理依赖链接、增量构建和版本发布,适合大型团队协作,但不用于初始化单个简单应用。
不要在新项目中选择 create-react-app。该工具已正式归档且停止维护。对于新的 React 项目,建议使用 Vite、Next.js 或 Remix 以获得更好的性能和现代开发体验。
不要在新的 Vue 3 项目中选择 vue-cli。它已进入维护模式,不再添加新功能。官方推荐使用基于 Vite 的 create-vue 工具,以获得更快的启动速度和热更新体验。
The sources for this package are in the Angular CLI repository. Please file issues and pull requests against that repository.
Usage information and reference details can be found in repository README file.