CLI 与 Vite 创建项目对比(附:最优解 create-vue)

表格总结:使用 CLI 和使用 Vite创建项目的区别


以下是使用 CLI 和 Vite 创建项目的主要区别总结表格:

对比维度 传统 CLI(如 Vue CLI、create-react-app) Vite
构建工具 Webpack(或基于其封装) 原生 ES 模块 + Rollup(生产环境)
启动速度 较慢(需打包所有模块) 极快(按需编译,无打包)
热更新速度 较慢(重新构建改动模块) 极快(基于 ES 模块实时更新)
配置复杂度 相对复杂(需 loader/plugin 配置) 更简单(预设优化,配置可选)
生态与插件 成熟,插件丰富 较新,但插件生态快速增长
开发体验 传统,适合大型稳定项目 现代,强调开发效率与体验
适用场景 传统项目,对兼容性要求高 现代浏览器项目,追求开发速度
构建输出 打包为传统 bundle 基于 ES 模块的代码分割

补充说明:

  1. Vite 优势:开发服务器启动快、热更新快,更适合现代前端开发流程。

  2. CLI 优势:配置成熟、兼容性好,适合需要深度定制或旧浏览器支持的项目。

  3. 选择建议 :新项目可优先考虑 Vite;已有 CLI 项目若无明显痛点,可逐步迁移或维持现状。


如果需要进一步对比细节(如具体配置示例),可以继续补充问题。


表格总结:使用 CLI 和使用 Vite创建的项目已经配置好的主要功能有哪些


以下是使用传统CLI(以Vue CLI为例)和Vite创建项目后,初始配置中已包含的主要功能对比表格:

功能模块 传统 CLI(Vue CLI 为例) Vite(以 create-vuecreate-vite 模板为例)
核心打包与开发 Webpack 及其完整配置、开发服务器 Vite 开发服务器、基于 Rollup 的生产构建
语言支持 Babel(ES6+转译)、可选的 TypeScript 原生 ES 模块、对 .jsx/.ts/.tsx 的原生支持(无需配置)
CSS 处理 css-loader、style-loader、postcss-loader(含 autoprefixer)、支持预处理器(需手动安装) 原生 CSS 支持、内嵌 PostCSS(含 autoprefixer)、CSS 预处理器支持(需手动安装,如 npm add -D sass
静态资源处理 file-loader/url-loader(可配置化处理) 内置支持(图片、字体等作为资源导入)
代码质量 ESLint 集成(可选) 通常不预装,但官方模板(如 create-vue)提供 ESLint + Prettier 可选
代码分割与优化 Webpack 的 SplitChunks 插件等 基于 Rollup 和动态导入的自动代码分割
环境变量 支持 .env 文件,process.env 访问 支持 .env 文件,通过 import.meta.env 访问
路由与状态管理 不包含,需手动安装配置 不包含,需手动安装配置
测试 可选集成 Jest/Cypress 等 不包含,需手动添加(如 Vitest、Cypress)
PWA 支持 通过 @vue/cli-plugin-pwa 插件添加 不包含 ,需通过 vite-plugin-pwa 等手动添加

关键解读与建议:

  1. "开箱即用"的核心理念不同

    • CLI :提供一套功能全面的"全家桶",包括代码检查、测试等,更适合希望初期就拥有完整工程化配置的团队。

    • Vite :遵循"按需集成"的理念,初始配置极其精简,只包含构建和开发的核心功能(如ES模块、CSS、资源处理),将选择权(如Lint、测试框架)完全交给开发者。

  2. 现代 vs 传统技术栈

    • Vite 直接拥抱现代浏览器ES模块标准,因此对TypeScript、JSX等支持是零配置 的。CSS的现代特性(如@import、CSS变量)也得到更好支持。

    • CLI 基于Webpack,需要通过相应的loader进行配置才能支持这些特性。

  3. 如何选择

    • 选择 CLI :如果你需要一个立即可用、功能齐全的起点,且不介意初始的复杂性和稍慢的启动速度。

    • 选择 Vite :如果你追求极致的开发速度现代化的开发体验 ,并愿意根据项目需求自行选择和集成工具链。


一句话总结:CLI是配置好的"精装房",Vite是高性能的"毛坯房"(但水电管道已通,装修更自由高效)。


表格总结:使用 CLI 和使用 Vite创建项目的过程中可选的配置选项有哪些?


以下是使用传统 CLI 和 Vite 创建项目过程中,常见可选配置选项的对比表格:

配置维度 传统 CLI(以 Vue CLI 为例) Vite(以 create-vite / create-vue 为例)
项目类型/框架 Vue 2 / Vue 3(单选) Vue, React, Preact, Svelte, Solid, Lit 等(多选)
包管理器 npm / yarn(可选) npm / yarn / pnpm / bun(可选)
编程语言 JavaScript / TypeScript(可选) JavaScript / TypeScript(可选,部分模板默认TS)
构建工具 不可选(锁定为Webpack) 不可选(锁定为Vite)
代码规范 ESLint(可选标准/Prettier/Airbnb)、保存时校验(可选) ESLint(create-vue可选,create-vite通常无)、Prettier(可选)
单元测试 Jest / Mocha(可选) Vitest / Jest / Cypress Component Testing(可选)
端到端测试 Cypress / Nightwatch(可选) Cypress / Playwright(可选,create-vue提供)
CSS 预处理器 Sass/SCSS、Less、Stylus(可选) 不在此阶段选择,后续手动安装对应依赖即可
Vue 专用选项 Babel、TSX支持、Vue Router、Vuex/Pinia、CSS预处理器等(可选) Vue Router、Pinia(状态管理)、TSX支持等(create-vue中可选)
PWA 支持 通过插件添加(可选) 不在此阶段选择 ,后续通过 vite-plugin-pwa 添加
SSR 支持 通过插件或模式添加(可选) 不在此阶段选择,后续通过对应框架的SSR方案添加
项目结构预设 默认结构,可通过 vue.config.js 深度定制 极简结构,可通过 vite.config.js 深度定制

核心差异总结:

  1. 配置理念的根本不同

    • CLI 是"功能预设" :在项目创建时通过交互式问答 ,让你一次性选择大量功能(测试、路由、状态管理、CSS处理器等),然后自动为你安装和配置好这些工具。

    • Vite 是"框架选择 + 按需添加" :在创建时主要让你选择使用哪个前端框架 。其他功能(如路由、状态管理、CSS处理器、测试)不在此阶段配置 ,而是创建项目后,由你根据需求手动安装和集成create-vue 是例外,它提供了类似旧CLI的丰富可选功能。

  2. 配置的灵活性

    • CLI :初始选择后,后续主要通过修改专属配置文件(如 vue.config.js)或使用CLI插件来调整,对Webpack的底层控制有一定门槛。

    • Vite :初始结构极其简单,所有功能都通过安装插件和修改通用的 vite.config.js 文件来添加,配置更直观、统一。

  3. 技术栈的现代性

    • CLI:可选工具(如Jest、Mocha)偏向传统生态。

    • Vite:在可选工具上更倾向现代生态(如默认推荐Vitest、Playwright)。


选择建议

  • 如果你希望快速开始一个功能明确、配置齐全 的项目,不想事后手动添加,传统 CLI 的交互式选择更适合你。

  • 如果你希望从最小核心开始 ,完全掌控每个要加入的功能和它的版本,享受更快的启动和更现代的生态,那么 Vite (及其官方模板)是你的首选。create-vue 则是一个很好的折中方案。


create-vue详解


create-vue 是 Vue 官方推荐的基于 Vite 的 Vue 项目脚手架工具,它取代了之前的 Vue CLI,为 Vue 3 项目提供了现代化的创建体验。


核心特性概览

特性 说明
基于 Vite 使用 Vite 作为构建工具,提供极速的启动和热更新
官方维护 由 Vue.js 核心团队维护,保证最佳实践和兼容性
交互式配置 命令行交互界面,灵活选择项目特性
现代化工具链 集成 TypeScript、Vitest、Pinia、Vue Router 等现代工具
渐进式配置 从最小配置开始,按需添加功能

安装与使用

1. 快速开始

bash

bash 复制代码
# npm
npm create vue@latest

# yarn
yarn create vue

# pnpm
pnpm create vue

# bun
bun create vue

2. 交互式选项详解

创建过程中会询问以下配置选项:

项目名称

bash

复制代码
✔ Project name: … my-vue-app
  • 设置项目文件夹名称

  • 支持 kebab-case 格式(推荐)

包管理器选择

bash

复制代码
✔ Package manager: › - Use arrow-keys. Return to submit.
    npm
    yarn
    pnpm
    bun
  • 选择项目使用的包管理器

  • 选择后会自动使用该管理器安装依赖

TypeScript 支持

bash

复制代码
✔ Add TypeScript? … No / Yes
  • 选择是否启用 TypeScript

  • 选择 "Yes" 后:

    • 自动配置 tsconfig.json

    • 文件扩展名使用 .ts.vue

    • 添加必要的类型定义

JSX 支持

bash

复制代码
✔ Add JSX Support? … No / Yes
  • 启用 Vue JSX/TSX 支持

  • 需要配合 TypeScript 使用

Vue Router

bash

复制代码
✔ Add Vue Router for Single Page Application development? … No / Yes
  • 添加 Vue Router 4

  • 创建基础路由结构

  • 生成示例路由文件

Pinia 状态管理

bash

复制代码
✔ Add Pinia for state management? … No / Yes
  • 添加 Pinia(Vue 官方状态管理库)

  • 创建 store 示例

Vitest 单元测试

bash

复制代码
✔ Add Vitest for Unit Testing? … No / Yes
  • 添加 Vitest(基于 Vite 的测试框架)

  • 配置测试环境

  • 创建示例测试文件

Cypress E2E 测试

bash

复制代码
✔ Add an End-to-End Testing Solution? › - Use arrow-keys. Return to submit.
    No
    Cypress
    Playwright
  • 选择端到端测试方案

  • Cypress:成熟的 E2E 测试框架

  • Playwright:微软开发的现代化测试框架

ESLint

bash

复制代码
✔ Add ESLint for code quality? … No / Yes
  • 添加 ESLint 代码检查

  • 使用 @vue/eslint-config-prettier 配置

  • 包含基本的 Vue 3 推荐规则

Prettier

bash

复制代码
✔ Add Prettier for code formatting? … No / Yes
  • 添加 Prettier 代码格式化

  • 集成 ESLint

  • 提供统一的代码风格


生成的项目结构

bash

复制代码
my-vue-app/
├── src/
│   ├── assets/           # 静态资源
│   ├── components/       # 组件目录
│   │   └── HelloWorld.vue
│   ├── router/           # 路由(如果选择)
│   │   └── index.ts
│   ├── stores/           # Pinia store(如果选择)
│   │   └── counter.ts
│   ├── views/            # 页面组件(如果选择路由)
│   │   └── HomeView.vue
│   ├── App.vue           # 根组件
│   └── main.ts           # 应用入口
├── tests/                # 测试文件
│   ├── e2e/              # E2E 测试
│   └── unit/             # 单元测试
├── public/               # 公共文件
├── index.html           # HTML 模板
├── package.json         # 项目配置
├── vite.config.ts       # Vite 配置
├── tsconfig.json        # TypeScript 配置(如果选择)
├── eslint.config.js     # ESLint 配置(如果选择)
├── .prettierrc.json     # Prettier 配置(如果选择)
└── README.md            # 项目说明

配置文件详解

1. vite.config.ts - Vite 配置

typescript

复制代码
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' // 如果选择 JSX

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(), // 如果选择 JSX
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  test: {
    // 如果选择 Vitest
    globals: true,
    environment: 'jsdom'
  }
})

2. tsconfig.json - TypeScript 配置

json

复制代码
{
  "extends": "@vue/tsconfig/tsconfig.dom.json",
  "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
  "exclude": ["src/**/__tests__/*"],
  "compilerOptions": {
    "composite": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

3. eslint.config.js - ESLint 配置

javascript

复制代码
import { defineConfig } from 'eslint-define-config'
import vue from 'eslint-plugin-vue'
import prettier from 'eslint-config-prettier'

export default defineConfig({
  extends: [
    'plugin:vue/vue3-recommended',
    prettier
  ],
  rules: {
    // 自定义规则
  }
})

可选的预设模板

create-vue 支持通过参数直接使用预设模板:

bash

bash 复制代码
# 创建最小化 Vue 项目
npm create vue@latest my-app -- --minimal

# 使用预设选项(跳过交互式问答)
npm create vue@latest my-app -- --typescript --router --pinia --vitest

可用选项参数:

  • --minimal: 最小化配置

  • --typescript--ts: 启用 TypeScript

  • --jsx: 启用 JSX 支持

  • --router: 添加 Vue Router

  • --pinia: 添加 Pinia

  • --vitest: 添加 Vitest

  • --cypress: 添加 Cypress

  • --playwright: 添加 Playwright

  • --eslint: 添加 ESLint

  • --prettier: 添加 Prettier


与 Vue CLI 的主要区别

方面 Vue CLI create-vue
构建工具 Webpack Vite
启动速度 较慢(全量打包) 极快(按需编译)
配置复杂度 复杂(Webpack 配置) 简单(Vite 配置)
热更新 较慢(模块重构建) 极快(ESM 热替换)
TypeScript 需要额外配置 原生支持,零配置
测试框架 Jest + Vue Test Utils Vitest(推荐)
状态管理 Vuex Pinia
现代特性 需手动配置 默认支持 ES 模块等

最佳实践建议

1. 推荐组合配置

bash

bash 复制代码
# 企业级项目推荐配置
npm create vue@latest my-app -- \
  --typescript \
  --router \
  --pinia \
  --vitest \
  --playwright \
  --eslint \
  --prettier

2. 开发工作流

bash

bash 复制代码
# 开发
npm run dev

# 构建
npm run build

# 预览生产版本
npm run preview

# 运行单元测试
npm run test:unit

# 运行 E2E 测试
npm run test:e2e

# 代码检查
npm run lint

3. 后续可添加的插件

bash

bash 复制代码
# 图标自动导入(unplugin-icons)
npm i -D unplugin-icons

# 自动导入组件(unplugin-vue-components)
npm i -D unplugin-vue-components

# PWA 支持(vite-plugin-pwa)
npm i -D vite-plugin-pwa

# 可视化打包分析(rollup-plugin-visualizer)
npm i -D rollup-plugin-visualizer

常见问题解决

1. 版本兼容性问题

bash 复制代码
bash

# 查看 Vue 和 Vite 版本
npm list vue vite

# 使用特定 Vue 版本
npm create vue@3.4.0

2. 网络问题(国内环境)

bash 复制代码
bash

# 使用淘宝镜像
npm config set registry https://registry.npmmirror.com

# 或使用 pnpm(自带国内镜像)
pnpm create vue

3. 依赖安装失败

bash 复制代码
bash

# 清除缓存重试
npm cache clean --force
rm -rf node_modules package-lock.json
npm install

总结

create-vue 代表了 Vue 生态系统向现代化构建工具的全面转型,它结合了:

  1. Vite 的极致性能 - 快速启动和热更新

  2. 交互式配置体验 - 灵活选择项目特性

  3. 官方最佳实践 - 集成最新的 Vue 生态工具

  4. 简洁的配置 - 易于理解和维护

对于新项目,强烈推荐使用 create-vue 而不是传统的 Vue CLI,它能提供更好的开发体验和更现代化的技术栈。


表格总结:create-vue和使用 Vite创建项目对比


create-vue 与 使用 Vite 创建项目对比

对比维度 create-vue 使用 Vite(直接创建)
定位 Vue 官方专属脚手架 通用前端项目脚手架
创建命令 npm create vue@latest npm create vite@latest
初始选择 仅 Vue 相关选项 多框架选择:Vue, React, Preact, Svelte, Solid, Lit, Vanilla 等
交互式选项 Vue 生态深度集成 : • TypeScript • JSX • Vue Router • Pinia • Vitest • Cypress/Playwright • ESLint + Prettier 基础框架选择 : • 框架类型 • 变体(如 React + TS) • 无生态工具选项
生成的项目结构 Vue 最佳实践结构 : • /src/components//src/views/(如果选路由) • /src/stores/(如果选Pinia) • /src/router/(如果选路由) • 完善的示例组件和代码 极简框架结构 : • 基本 main.js/ts + App.vue/jsx • 最小示例代码 • 无预设目录结构
配置文件 Vue 优化配置 : • vite.config.ts 预配置 Vue 插件 • TypeScript 路径别名 @/* • 集成的 ESLint 规则(Vue 专用) • 测试环境预配置 基础框架配置 : • 仅包含所选框架的基本插件 • 无路径别名(需手动添加) • 无代码检查配置
依赖包 完整生态依赖 (按选择): • vue, @vitejs/plugin-vuevue-router, piniavitest, @vue/test-utilseslint, @vue/eslint-configprettier 仅核心依赖 : • vue + @vitejs/plugin-vue • 或 react + @vitejs/plugin-react无额外工具
测试配置 开箱即用 : • Vitest 完整配置 • 组件测试示例 • E2E 测试配置(如果选择) 需手动配置 : • 无测试框架 • 需自行安装和配置 Vitest/Jest
路由与状态管理 一键集成 : • 自动安装配置 Vue Router 4 • 自动安装配置 Pinia • 提供使用示例 需手动添加 : • 需单独安装 vue-router • 需单独安装 piniavuex • 需自行配置和集成
TypeScript 支持 深度集成 : • Vue-specific TS 配置 • .vue 文件类型支持 • 组件类型提示优化 基础支持 : • 标准 TS 配置 • 需手动增强 Vue 类型支持
代码规范 Vue 专用规则 : • @vue/eslint-config-prettier • Vue 3 推荐规则 • 保存时自动修复 需手动配置 : • 需自行安装 ESLint • 需寻找和配置 Vue 规则
开发者体验 Vue 开发者友好 : • 官方最佳实践 • 减少决策疲劳 • 一致的团队配置 高度自由灵活 : • 完全自主配置 • 适合有特定需求的开发者
后续扩展 Vue 生态插件优先 : • 官方插件生态 • 社区 Vue 插件 框架无关性 : • 可使用任何 Vite 插件 • 不限于 Vue 生态
适用场景 Vue 项目最佳选择 : • 新 Vue 3 项目 • 企业级 Vue 应用 • 需要快速标准化配置 • 团队统一技术栈 灵活需求场景 : • 需要自定义配置 • 非 Vue 框架项目 • 学习 Vite 本身 • 特殊构建需求
升级维护 官方 Vue 团队维护 : • 与 Vue 版本同步 • 安全更新及时 Vite 团队维护 : • 框架通用更新 • 可能需手动适配 Vue 变化

核心差异总结

1. 定位差异

  • create-vue :是 Vue 专属的"精装修"方案,提供 Vue 项目的最佳实践和完整生态

  • Vite 直接创建 :是 "毛坯房"方案,只提供框架核心,其余全部自己装修

2. 配置哲学

  • create-vue"明智的默认值" - 预设了 Vue 开发所需的一切,减少选择和配置时间

  • Vite 直接创建"极简起点" - 最小化预设,最大程度自由

3. 工作流程影响

bash

bash 复制代码
# create-vue 流程(一步到位)
npm create vue@latest
→ 交互选择所有功能
→ 生成完整可运行的项目
→ 直接开始业务开发

# Vite 直接创建流程(分步进行)
npm create vite@latest
→ 选择框架
→ 生成基础项目
→ 手动安装路由: npm install vue-router
→ 手动安装状态管理: npm install pinia
→ 手动配置测试: npm install -D vitest
→ 手动配置代码规范
→ ...更多配置
→ 开始业务开发

选择建议

选择 create-vue 当:

  • ✅ 你是 Vue 开发者

  • ✅ 开始 新的 Vue 3 项目

  • ✅ 需要 快速标准化配置

  • ✅ 希望使用 官方最佳实践

  • ✅ 需要 完整的开箱即用体验

  • ✅ 团队需要 统一的工程化配置


选择 Vite 直接创建 当:

  • ✅ 你需要创建 非 Vue 项目(React、Svelte 等)

  • ✅ 你有 非常特殊的配置需求

  • ✅ 你 完全理解并想控制 每个配置细节

  • ✅ 项目需要 最小化依赖

  • ✅ 你是 学习或研究目的


实际示例对比

create-vue 生成的关键代码片段:

typescript

TypeScript 复制代码
// 自动生成的 router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
    // 自动生成的路由...
  ]
})

Vite 直接创建后需手动添加:

bash

bash 复制代码
# 需要手动执行的一系列命令
npm install vue-router
npm install pinia
npm install -D vitest @vue/test-utils
npm install -D eslint @vue/eslint-config-typescript
# ...然后手动创建所有配置文件

结论

对于 Vue 开发者来说,create-vue 是当前创建 Vue 项目的首选和推荐方式。它封装了所有 Vue 项目的最佳实践,让你可以专注于业务开发而非工程配置。

而直接使用 Vite 创建更适合需要高度自定义或多框架使用的场景。

简单来说:做 Vue 项目就用 create-vue,做其他框架项目或者需要极致自定义就用 Vite 直接创建。


如何判断项目是用哪种方式创建的

可以通过以下方法来识别项目是如何创建的:

一、快速识别方法

检查点 create-vue 创建 Vite 直接创建 Vue CLI 创建
查看 package.json ✅ 有 @vitejs/plugin-vue ✅ 可能有 vue-routerpinia ✅ 可能有 @vue/eslint-config ✅ 脚本:"dev": "vite" ✅ 有 @vitejs/plugin-vue ❌ 无 Vue 生态工具 ✅ 脚本:"dev": "vite" ❌ 有 @vue/cli-service ✅ 脚本:"serve": "vue-cli-service serve"
查看配置文件 vite.config.ts ✅ 可能有 vitest.config.ts ✅ 可能有 eslint.config.js vite.config.ts(基础) ❌ 无测试/代码检查配置 vue.config.js ✅ 可能有 babel.config.js
项目结构 ✅ 完整 Vue 结构(components/views/stores) ✅ 示例代码较丰富 ✅ 极简结构 ✅ 只有 src/main.js + App.vue ✅ 无预设目录 ✅ 传统 Vue CLI 结构 ✅ public/src/components/ ✅ 可能有 src/views/
依赖文件夹 node_modules/ 中有大量 Vue 生态包 node_modules/ 中只有核心包 node_modules/ 中有 Webpack 相关包

二、详细诊断步骤

方法1:检查 package.json(最可靠)

create-vue 特征:

json

javascript 复制代码
{
  "name": "my-vue-app",
  "scripts": {
    "dev": "vite",                    // Vite 命令
    "build": "vite build",
    "preview": "vite preview",
    "test:unit": "vitest",           // 如果有选 Vitest
    "lint": "eslint ."               // 如果有选 ESLint
  },
  "dependencies": {
    "vue": "^3.4.0",
    "vue-router": "^4.2.0",          // 如果有选路由
    "pinia": "^2.1.0"                // 如果有选 Pinia
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.0",
    "@vue/eslint-config-prettier": "^9.0.0",  // 典型 create-vue 包
    "@vue/test-utils": "^2.4.0",     // 如果有选测试
    "vite": "^5.0.0",
    "vitest": "^1.0.0",              // 如果有选测试
    "eslint-plugin-vue": "^9.0.0"    // 如果有选 ESLint
  }
}

Vite 直接创建特征:

json

javascript 复制代码
{
  "name": "vite-project",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "vue": "^3.4.0"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.0",
    "vite": "^5.0.0"
  }
}

Vue CLI 创建特征:

json

javascript 复制代码
{
  "name": "vue-cli-project",
  "scripts": {
    "serve": "vue-cli-service serve",  // 关键标识
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "vue": "^2.6.14"  // 或 ^3.0.0
  },
  "devDependencies": {
    "@vue/cli-service": "^5.0.0",      // 关键标识
    "@vue/cli-plugin-babel": "^5.0.0",
    "@vue/cli-plugin-eslint": "^5.0.0"
  }
}

方法2:检查配置文件

终端命令快速查看:

bash

复制代码
# 查看配置文件
ls -la | grep -E "(vite|vue|vitest|eslint)\.config"

# 可能的结果:
# create-vue: vite.config.ts, vitest.config.ts, eslint.config.js
# Vite直接创建: vite.config.ts
# Vue CLI: vue.config.js, babel.config.js

# 查看 package.json 中的脚本
cat package.json | grep -A5 '"scripts"'

方法3:检查项目结构

bash

复制代码
# 查看目录结构
tree -I node_modules -L 2

# create-vue 典型结构:
# ├── src/
# │   ├── components/
# │   ├── views/           # 如果有选路由
# │   ├── stores/          # 如果有选 Pinia
# │   ├── router/          # 如果有选路由
# │   └── main.ts
# ├── tests/               # 如果有选测试
# ├── vite.config.ts
# └── eslint.config.js     # 如果有选 ESLint

# Vite 直接创建结构:
# ├── src/
# │   ├── main.js
# │   └── App.vue
# └── vite.config.js

# Vue CLI 结构:
# ├── public/
# ├── src/
# │   ├── components/
# │   ├── views/
# │   └── main.js
# ├── babel.config.js
# └── vue.config.js

方法4:检查构建工具

bash

复制代码
# 查看构建时使用的工具
npm run dev

# 观察启动信息:
# Vite 项目:会显示 "VITE v5.0.0 ready in XXXms"
# Vue CLI 项目:会显示 "App running at: http://localhost:8080/"

# 或者检查 node_modules
ls node_modules | grep -E "(vite|@vue/cli|webpack)"

# Vite 项目:会有 vite 目录
# Vue CLI 项目:会有 @vue/cli-service 和 webpack 相关目录

三、自动化检测脚本

创建一个检测脚本 check-project-type.js

javascript

javascript 复制代码
#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

function detectProjectType() {
  const packageJsonPath = path.join(process.cwd(), 'package.json');
  
  if (!fs.existsSync(packageJsonPath)) {
    console.log('❌ 未找到 package.json,不是有效的 Node.js 项目');
    return;
  }

  const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
  const scripts = pkg.scripts || {};
  const devDeps = pkg.devDependencies || {};
  const deps = pkg.dependencies || {};

  console.log('🔍 项目检测结果:\n');

  // 检查构建工具
  if (devDeps['@vue/cli-service'] || scripts.serve?.includes('vue-cli-service')) {
    console.log('✅ 项目类型:Vue CLI 创建');
    console.log('   特征:使用 @vue/cli-service 和 Webpack');
    
    // 检查 Vue 版本
    const vueVersion = deps.vue || devDeps.vue;
    console.log(`   Vue 版本:${vueVersion || '未知'}`);
    
    // 检查 Vuex
    if (deps.vuex) console.log('   📦 包含 Vuex');
    
    return 'vue-cli';
  }

  if (devDeps.vite || scripts.dev === 'vite') {
    // 区分 create-vue 和普通 Vite 创建
    const hasVueRouter = deps['vue-router'];
    const hasPinia = deps.pinia;
    const hasVueEslintConfig = devDeps['@vue/eslint-config'];
    const hasVitest = devDeps.vitest;
    
    const isCreateVue = hasVueRouter || hasPinia || hasVueEslintConfig || hasVitest;
    
    if (isCreateVue) {
      console.log('✅ 项目类型:create-vue 创建(Vue 官方 Vite 脚手架)');
      console.log('   特征:Vite + Vue 生态完整集成');
      
      // 列出包含的功能
      const features = [];
      if (hasVueRouter) features.push('Vue Router');
      if (hasPinia) features.push('Pinia');
      if (hasVitest) features.push('Vitest');
      if (hasVueEslintConfig) features.push('ESLint (Vue 配置)');
      
      if (features.length > 0) {
        console.log(`   🛠️  包含功能:${features.join(', ')}`);
      }
      
      return 'create-vue';
    } else {
      console.log('✅ 项目类型:Vite 直接创建(通用脚手架)');
      console.log('   特征:基础 Vite 配置,无预设 Vue 生态工具');
      
      // 检查使用的框架
      if (devDeps['@vitejs/plugin-vue']) console.log('   🖼️  框架:Vue');
      if (devDeps['@vitejs/plugin-react']) console.log('   🖼️  框架:React');
      if (devDeps['@sveltejs/vite-plugin-svelte']) console.log('   🖼️  框架:Svelte');
      
      return 'vite';
    }
  }

  // Nuxt.js 检测
  if (deps.nuxt || devDeps.nuxt) {
    console.log('✅ 项目类型:Nuxt.js 创建');
    return 'nuxt';
  }

  console.log('❓ 未知项目类型');
  console.log('   可能是:');
  console.log('   - 手动配置的 Vue 项目');
  console.log('   - 其他框架项目');
  console.log('   - 自定义脚手架创建');
  
  return 'unknown';
}

// 运行检测
detectProjectType();
使用方式:

bash

# 将脚本保存到项目根目录
node check-project-type.js

# 或者在 package.json 中添加脚本
# "scripts": {
#   "check:type": "node check-project-type.js"
# }

四、可视化判断流程图

text

复制代码
开始检测
    ↓
检查 package.json
    ↓
是否有 @vue/cli-service? → 是 → Vue CLI 项目
    ↓ 否
是否有 vite? → 否 → 其他/未知类型
    ↓ 是
是否有 vue-router/pinia/vitest? → 是 → create-vue 项目
    ↓ 否
Vite 直接创建项目

五、实际案例判断

案例1:典型的 create-vue 项目

bash

复制代码
$ npm run dev
# 输出: VITE v5.0.0 ready in 250ms
# 访问: http://localhost:5173

$ ls
# vite.config.ts  tests/  src/views/  src/stores/

案例2:典型的 Vite 直接创建

bash

复制代码
$ npm run dev  
# 输出: VITE v5.0.0 ready in 150ms
# 访问: http://localhost:5173

$ ls
# vite.config.js  src/App.vue  src/main.js
# 没有 tests/, views/, stores/ 等目录

案例3:Vue CLI 项目

bash

复制代码
$ npm run serve
# 输出: DONE Compiled successfully in 2350ms
# 访问: http://localhost:8080

$ ls
# vue.config.js  babel.config.js  public/

总结

最快判断方法:

  1. 查看 package.json 中的 scripts 字段

    • "dev": "vite" → Vite 项目

    • "serve": "vue-cli-service serve" → Vue CLI 项目

  2. 查看是否有 vue-routerpinia

    • 有 → 很可能是 create-vue

    • 无 → 可能是 Vite 直接创建


大多数情况下,通过 package.json 文件就能快速确定项目的创建方式,这是最可靠的判断依据。

相关推荐
全栈前端老曹13 小时前
【前端权限】 权限变更热更新
前端·javascript·vue·react·ui框架·权限系统·前端权限
今天不要写bug1 天前
基于qrcode前端实现链接转二维码的生成与下载
前端·javascript·typescript·vue
剑小麟1 天前
vue2项目中安装vant报错的解决办法
vue.js·java-ee·vue
Airene2 天前
Vite 8 发布 beta 版本了,升级体验一下 Rolldown
前端·vite
你真的可爱呀2 天前
4.前后端联调(Vue3+Vite + Express + MySQL)
mysql·node.js·vue·express
前端老曹2 天前
vue3 三级路由无法缓存的终极解决方案
前端·javascript·vue.js·vue
行走的陀螺仪2 天前
高级前端 Input 公共组件设计方案(Vue3 + TypeScript)
前端·javascript·typescript·vue·组件设计方案
by__csdn2 天前
微前端架构:从理论到实践的全面解析
前端·javascript·vue.js·架构·typescript·vue·ecmascript
Felix_Fly2 天前
用 Vue3 + naive-cron 开发 Cron 表达式工具:从 0 到 1 实现生成 + 反解析
前端·javascript·vue.js·vue·cron·naive