实用篇:vsCode 中连接 WSL 并快速开始一个 Vue3 新项目

本文介绍了使用pnpm创建Vue3项目的完整流程。


首先配置WSL前端开发环境,通过VS Code连接WSL远程开发。


使用pnpm创建包含TypeScript、Vue Router、Pinia、ESLint和Prettier的Vue3项目。


详细分析了JSX和模板语法的适用场景,建议业务应用使用模板语法。


介绍了Vitest单元测试框架和E2E测试的重要性,特别适合管理系统这类复杂应用。


最后讨论了实验性功能Oxlint和rolldown-vite的选择建议,推荐新手选择稳健方案。


整个过程从环境配置到项目初始化,为开发者提供了完整的Vue3+TypeScript开发环境搭建指南。


环境配置参考

前端开发环境(WSL:Node.js + pnpm)配置过程错误及解决(附:初始化一个 Vue 3 测试项目)


打开 vsCode 连接 WSL 远程

直接点击连接到=》打开文件夹=》找到你的项目根目录

在查看里面打开终端,现在显示的就是整个项目根目录。可以在这里新建项目。


使用 pnpm 创建 Vue 3 项目

bash 复制代码
pnpm create vue@latest SmartFridgeManager -- --typescript --router --pinia --eslint --prettier

说明:

  • SmartFridgeManager 是项目名称

  • 所有需要的特性都包含在一个命令中:

    • --typescript:TypeScript 支持

    • --router:Vue Router

    • --pinia:状态管理

    • --eslint:代码检查

    • --prettier:代码格式化

执行后,需要:

  1. 进入项目目录:cd SmartFridgeManager

  2. 安装依赖:pnpm install

  3. 启动开发服务器:pnpm dev


这样创建的项目将包含完整的 Vue 3 + TypeScript 开发环境,并配置了 ESLint 和 Prettier 进行代码格式化。


开始新建项目

bash 复制代码
pnpm create vue@latest SmartFridgeManager -- --typescript --router --pinia --eslint --prettier

提示是否安装的一些选项


什么是 JSX


JSX 是一种 JavaScript 语法扩展,它允许你在 JavaScript 代码中编写类似 HTML 的标记。虽然 Vue 默认使用模板语法(.vue 文件中的 <template>),但 Vue 也支持使用 JSX。


1. 替代模板语法

2. 主要使用场景

  • 库/组件库开发:许多 Vue UI 库(如 Element Plus、Ant Design Vue)使用 JSX

  • 复杂逻辑组件:当渲染逻辑非常复杂时,JSX 可能比模板更灵活

  • React 开发者迁移:熟悉 React 的开发者更习惯 JSX

  • 动态组件生成:需要高度动态生成组件结构的情况


3. 与模板语法的对比

特性 模板语法 JSX 语法
学习曲线 简单,类似 HTML 需要学习 JSX 语法
类型支持 TypeScript 支持较好 TypeScript 支持更好
灵活性 受限于模板语法 更灵活,可使用完整 JavaScript
性能 编译时优化 运行时编译
调试 模板编译错误 JavaScript 错误
IDE 支持 需要 Vue 插件 标准 JS/TS 支持

4. 什么时候选择 JSX?

推荐选择 JSX:

  • 你或团队熟悉 React

  • 项目需要大量动态组件生成

  • 需要更好的 TypeScript 类型推断

  • 开发通用组件库


推荐使用模板:

  • 大多数业务应用

  • 团队熟悉 HTML/Vue 模板

  • 需要更好的性能(编译时优化)

  • 希望更好的 IDE 支持(Volar)


5. 安装 JSX 支持后

如果选择安装 JSX support,会添加:

  • @vue/babel-plugin-jsx@vue/babel-preset-jsx

  • 配置支持 .jsx.tsx 文件扩展名

  • 可以在项目中混合使用 .vue.jsx/.tsx 文件

6. 项目创建时的建议

  • 推荐不选 JSX:使用 Vue 模板语法更合适

  • 理由:业务应用通常模板语法足够,更易维护

  • 除非你有特定需求或团队偏好 JSX

7. 后续添加

即使现在不选,以后也可以随时添加 JSX 支持:

bash 复制代码
pnpm add @vue/babel-plugin-jsx

总结 :除非你有明确的 JSX 需求,否则对于大多数 Vue 3 项目,特别是业务应用,使用默认的模板语法是更好的选择。


什么是 Vitest


Vitest 是一个基于 Vite 的现代化单元测试框架,专为 Vue 3 和现代 JavaScript 项目设计。


核心特性

1. 与 Vite 生态完美集成
bash 复制代码
# 使用相同的配置
vite.config.ts  # 开发构建配置
vitest.config.ts # 测试配置(可共用vite配置)
2. 极快的速度
  • 智能文件监听(只运行相关测试)

  • 并发测试执行

  • 几乎零配置启动

3. 与 Jest 高度兼容
javascript 复制代码
// Jest 用户很容易迁移
describe('MyComponent', () => {
  test('should work', () => {
    expect(1 + 1).toBe(2)
  })
})

在 Vue 3 项目中的用途

  1. 组件单元测试

  2. 组合函数测试

  3. 工具函数测试


Vitest vs Jest 对比

特性 Vitest Jest
速度 极快(基于 Vite) 较慢
配置 简单,复用 Vite 配置 需要单独配置
ESM 支持 ✅ 原生支持 ⚠️ 需要配置
TypeScript ✅ 零配置支持 ⚠️ 需要 ts-jest
热更新 ✅ 即时更新 ❌ 较慢
生态系统 发展中 成熟完善
浏览器 API ✅ 内置 Mock ⚠️ 需要 jsdom

推荐选择 Vitest

因为:

  1. 项目需要可靠的管理逻辑

  2. 组件交互复杂需要测试

  3. Vue 3 + Vite 生态完美集成

  4. 保证应用质量和维护性


即使不选,后期也可轻松添加:

bash 复制代码
pnpm add -D vitest @vue/test-utils

Vitest 让单元测试变得简单快速,特别适合需要高质量保证的智能冰箱管理系统。


End-to-End Testing


End-to-End Testing(端到端测试,简称 E2E 测试) 是从用户角度模拟真实使用场景的测试方法,测试整个应用程序的完整流程。


核心概念

1. 与单元测试的区别
测试类型 测试范围 关注点 速度
单元测试 单个函数/组件 代码逻辑正确性 ⚡ 快
集成测试 多个模块交互 模块间协作 ⚡ 中等
E2E 测试 整个应用流程 用户体验/业务流程 🐢 慢

2. 测试金字塔
复制代码
        /\
       /  \     少量 E2E 测试
      /____\    用户场景验证
     /      \   
    /________\  适量集成测试
   /          \  模块间交互
  /____________\ 大量单元测试
                基础功能验证

在 Vue 3 项目中的用途

  1. 测试真实用户流程

  2. 关键业务流程


Vue 3 项目中常见的 E2E 工具

  1. Cypress(创建 Vue 项目时默认选项)

  2. Playwright

  3. Puppeteer


E2E 测试的优势

1. 发现集成问题
javascript 复制代码
// 可能发现的问题
- 前端与 API 不匹配
- 路由导航问题  
- 认证/授权流程缺陷
- 浏览器兼容性问题
- 移动端响应式问题
2. 模拟真实用户行为
javascript 复制代码
// 真实场景测试
test('用户操作顺序可能出乎意料', async () => {
  // 用户可能:后退 → 刷新 → 重复提交
  await page.goBack()
  await page.reload()
  await page.click('button[type="submit"]')
  await page.click('button[type="submit"]') // 重复点击!
})

成本和收益考虑

适合 E2E 测试的情况(✅ 推荐):
  • 关键业务路径(注册、支付、下单)

  • 跨组件集成流程

  • 用户体验验证

  • 发布前的回归测试


可能不需要 E2E 测试的情况(❌ 可选):
  • 小型个人项目

  • 原型/MVP 阶段

  • 没有复杂用户流程

  • 资源有限的团队


建议选择 E2E 测试,因为:

  1. 涉及重要数据操作:食品库存、用户数据

  2. 多步骤流程:注册 → 添加食品 → 生成清单

  3. 跨平台使用:Web + 移动端 PWA

  4. 家庭共享功能:复杂的权限和同步逻辑


如果资源有限,可以先测试

复制代码
// 最小化 E2E 测试集
1. 用户注册和登录
2. 添加和管理食品
3. 过期食品提醒
4. 购物清单生成

总结

End-to-End Testing 是验证应用从用户角度能否正常工作的关键手段。 有实际业务流程的应用,E2E 测试能确保:

  • ✅ 用户流程完整可用

  • ✅ 不同模块正确集成

  • ✅ 数据一致性得到保障

  • ✅ 发布前发现重大缺陷


建议: 开始可以选择 Cypress(Vue 项目集成好),编写少量关键路径测试,随着项目发展逐步增加。



bash 复制代码
Select experimental features to include in your project: (↑/↓ to
navigate, space to select, a to toggle all, enter to confirm)
│  ◻ Oxlint
│  ◻ rolldown-vite (experimental)

这两个是 Vue 项目创建时的实验性功能选项。


Oxlint


Oxlint 是一个用 Rust 编写的超快速 JavaScript/TypeScript linter,旨在替代 ESLint。


优势:

  • ⚡ 极速:Rust 编写,比 Node.js 的 ESLint 快得多

  • 🔋 电池内置:开箱即用,无需复杂配置

  • 🎯 TypeScript 友好:对 Vue 3 + TypeScript 支持好


当前状态:

  • ✅ 可用于生产

  • ⚠️ 生态还在发展中(插件比 ESLint 少)

  • 🔄 部分 Vue 特定规则可能不如 ESLint 完善


rolldown-vite


Rolldown 是用 Rust 编写的 JavaScript 打包工具,旨在替代 Rollup,与 Vite 深度集成。


优势:

  • 🏎️ 更快的生产构建:Rust 编写,构建速度提升

  • 📦 更好的 tree-shaking:更智能的代码优化

  • 🔄 与 Vite 无缝集成:替代 Rollup 作为生产构建器


性能对比:

复制代码
传统构建(Rollup):
✅ 开发热更新:快
⚠️ 生产构建:中等

使用 rolldown:
✅ 开发热更新:快  
✅ 生产构建:更快(提升 20-50%)

当前状态:

  • 🔬 实验性阶段(标注了 experimental)

  • ⚠️ 可能存在兼容性问题

  • 🚧 仍在积极开发中


是否选择 Oxlint

✅ 推荐选择,如果:
  1. 你追求极致速度(大型项目尤其明显)

  2. 不依赖复杂 ESLint 插件

  3. 愿意尝试新技术

❌ 建议不选,如果:
  1. 需要特定 ESLint 插件(如 Vue 3 推荐规则)

  2. 团队已有 ESLint 配置经验

  3. 需要完美的 Vue SFC 支持


对于你的项目:

复制代码
# 如果选择 Oxlint,会得到:
- oxlint 替换 eslint
- 更快的代码检查
- 简化的配置

是否选择 rolldown-vite

✅ 推荐选择,如果:
  1. 项目会频繁构建生产版本

  2. 应用规模会逐渐增大

  3. 愿意接受实验性技术

❌ 建议不选,如果:
  1. 项目主要是开发期间使用

  2. 对构建稳定性要求极高

  3. 不需要优化构建速度


我的推荐方案

方案 A:稳健方案(推荐新手)
复制代码
[ ] Oxlint           # 保持 ESLint(生态更成熟)
[ ] rolldown-vite    # 暂时不用实验性功能

理由: 项目初期,稳定性更重要


方案 B:激进方案(喜欢尝鲜)
复制代码
[x] Oxlint           # 体验极速 linting
[ ] rolldown-vite    # 生产构建暂不用实验功能

理由: Oxlint 相对稳定,开发体验提升明显


方案 C:完全实验方案
复制代码
[x] Oxlint           # 快速代码检查
[x] rolldown-vite    # 快速生产构建

理由: 追求极致性能,接受可能的小问题


选择建议总结

  1. Oxlint :✅ 可以考虑选择

    • 开发体验提升明显

    • 对 Vue 3 + TypeScript 支持良好

    • 即使有问题,可以随时切换回 ESLint

  2. rolldown-vite :⚠️ 建议暂时不选

    • 标注为实验性

    • 生产构建稳定性重要

    • 可以等项目稳定后再考虑


最终推荐选择:

复制代码
[✓] Oxlint
[ ] rolldown-vite (experimental)

这样你既能体验现代化的极速 linting,又能保持项目构建的稳定性。以后随时可以添加 rolldown 或切换回 ESLint。


Skip all example code and start with a blank Vue project?


bash 复制代码
Skip all example code and start with a blank Vue project?

是的,推荐选择 "Skip all example code and start with a blank Vue project"(跳过所有示例代码,从空白 Vue 项目开始)


对于项目更合适

复制代码
# 选择跳过 → 干净的空白项目
src/
├── App.vue              # 干净的根组件
├── main.ts             # 入口文件
├── components/         # 空组件目录
├── views/             # 空视图目录
└── assets/            # 资源目录

# 不跳过 → 包含示例代码
src/
├── App.vue              # 包含示例组件
├── main.ts             # 
├── components/
│   ├── WelcomeItem.vue  # 示例组件
│   └── TheWelcome.vue   # 示例组件
├── views/
│   ├── HomeView.vue     # 示例页面
│   └── AboutView.vue    # 示例页面
└── assets/
    └── base.css         # 示例样式

你需要从头构建特定功能

智能冰箱管理系统有独特的业务需求:

  • ✅ 需要自定义的组件结构

  • ✅ 特定的页面布局

  • ✅ 专业的设计系统

  • ✅ 业务相关功能模块

示例代码对你没帮助

默认示例包含:

  • 欢迎页面

  • 关于页面

  • 基本导航示例

  • 示例组件


选择跳过的好处

1. 项目结构更清晰
复制代码
# 你可以按业务需求组织
src/
├── features/           # 功能模块
│   ├── food/          # 食品管理
│   ├── fridge/        # 冰箱状态
│   └── shopping/      # 购物清单
├── shared/            # 共享组件
├── layouts/           # 布局组件
└── App.vue           # 自定义根组件
2. 没有不必要的依赖
复制代码
// 不需要删除示例代码
// 不需要修改示例路由
// 不需要清理示例样式
3. 完全掌控代码质量
复制代码
// 你可以从第一天开始:
- 按业务需求编写组件
- 建立适合项目的代码规范
- 添加项目特定的工具函数
- 设计专业的 UI/UX

如果你不跳过会怎样?

需要手动清理:

复制代码
1. 删除 components/WelcomeItem.vue
2. 删除 components/TheWelcome.vue  
3. 删除 views/HomeView.vue
4. 删除 views/AboutView.vue
5. 修改 router/index.ts
6. 修改 App.vue
7. 可能修改样式文件

这大概需要:

  • 10-15 分钟清理时间

  • 可能遗漏某些引用

  • 需要测试确保没报错


特殊情况:什么时候不应该跳过?

如果以下情况,可以不跳过:

  1. 你是 Vue 3 完全新手

  2. 想快速看看项目结构示例

  3. 需要参考如何组织组件

  4. 项目是学习/实验性质


不跳过,带示例代码的 Vue


目录结构


相关工具已安装

接下来按照提示即可

bash 复制代码
Scaffolding project in /home/mumu/projects/SmartFridgeManager...
│
└  Done. Now run:

   cd SmartFridgeManager
   pnpm install
   pnpm format
   pnpm dev

| Optional: Initialize Git in your project directory with:

   git init && git add -A && git commit -m "initial commit"

mumu@MuJinqiu:~/projects$ 

提示 pnpm 有更新

bash 复制代码
 Update available! 10.24.0 → 10.26.2.   │
   │   Changelog: https://pnpm.io/v/10.26.2   │
   │     To update, run: pnpm add -g pnpm 

bash 复制代码
Ignored build scripts: cypress, esbuild.                         │
│   Run "pnpm approve-builds" to pick which dependencies should be   │
│   allowed to run scripts. 

访问新项目


空白项目


目录结构


补充:Git 绑定 vsCode

直接在 vsCode 中上传/更新代码到 Git,如果登录过期会弹框提示登录或绑定。

相关推荐
讲师-汪春波2 小时前
win11 vscode 配置 claude code
ide·vscode·编辑器
丸子哥哥2 小时前
vue + uni-app:利用原生uni.chooseImage封装拍照功能的组件
微信小程序·uni-app·vue
笔夏2 小时前
【安卓学习之myt】git常用命令
android·git
天天向上vir3 小时前
防抖与节流
前端·typescript·vue
@AfeiyuO3 小时前
Vue3 饼图定制图
vue·echarts
陌影-3 小时前
vite+vue3项目配置git commit提交
git
弘毅 失败的 mian4 小时前
Git 远程操作
经验分享·笔记·git
wdfk_prog15 小时前
Git实战指南:如何从另一个分支同步文件时完整保留Commit提交历史
git
In_life 在生活15 小时前
GIT stash 命令的使用
git