从 0 到 1 搭建 Vite+Vue3+TS 工程模板:能上手操作的指南
引言
在现代前端开发中,选择合适的工具链对开发效率和项目质量至关重要。Vite 作为新一代的前端构建工具,以其极速的开发体验和丰富的功能成为越来越多开发者的选择。Vue3 作为目前最受欢迎的前端框架之一,结合 TypeScript 提供了类型安全,能够帮助开发者构建更加健壮的应用。
本文将带领大家从零开始,一步步搭建一个基于 Vite+Vue3+TypeScript 的工程模板,即使你是前端新手,也能跟着本文轻松上手。
环境准备
在开始之前,我们需要确保已经安装了以下工具:
-
Node.js (推荐版本 >= 14.0.0)
- 访问 Node.js 官网 下载并安装
- 安装完成后,在终端运行
node -v和npm -v验证安装
-
代码编辑器
- 推荐 VS Code,它对 TypeScript 和 Vue 有很好的支持
- 安装 Volar 插件(替代之前的 Vetur)以获得更好的 Vue3 支持
创建项目
Vite 提供了快速创建 Vue 项目的脚手架工具。我们可以通过以下步骤创建项目:
-
打开终端,运行以下命令创建项目:
npm create vite@latest my-vue-app -- --template vue-ts这将创建一个名为
my-vue-app的目录,并使用 Vue+TypeScript 模板初始化项目。 -
进入项目目录并安装依赖:
cd my-vue-app npm install -
启动开发服务器:
npm run dev
现在,打开浏览器访问 http://localhost:3000,你应该能看到 Vue 的欢迎页面。
项目结构解析
创建的项目结构如下:
my-vue-app/
├── public/ # 静态资源目录
├── src/ # 源代码目录
│ ├── assets/ # 资源文件
│ ├── components/ # 组件
│ ├── App.vue # 根组件
│ ├── main.ts # 入口文件
│ ├── shims-vue.d.ts # Vue 类型声明文件
│ └── vite-env.d.ts # Vite 环境变量类型声明
├── index.html # HTML 模板
├── package.json # 项目配置和依赖
├── tsconfig.json # TypeScript 配置
├── vite.config.ts # Vite 配置
└── .gitignore # Git 忽略文件
让我们详细了解一下关键文件:
- src/main.ts: 应用的入口文件,负责创建 Vue 应用实例并挂载到 DOM
- src/App.vue: 根组件,是整个应用的顶层组件
- src/components/: 存放可复用的组件
- index.html: 应用的 HTML 模板,Vite 会将应用注入到此文件中
- tsconfig.json: TypeScript 的配置文件,定义了 TypeScript 的编译选项
- vite.config.ts: Vite 的配置文件,可以配置插件、路径别名等
基础配置
TypeScript 配置
打开 tsconfig.json,我们可以看到一些基本的 TypeScript 配置。对于 Vue 项目,我们需要确保以下配置正确:
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]
}
这里我们添加了 paths 配置,可以使用 @ 别名指向 src 目录,这样在导入模块时更加方便。
Vite 配置
打开 vite.config.ts,我们可以进行一些基础配置:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
server: {
port: 3000,
open: true,
cors: true
}
})
这里我们配置了路径别名 @ 指向 src 目录,并设置了开发服务器的一些选项。
为了让 TypeScript 能够正确识别 @ 别名,我们需要在 tsconfig.json 中已经添加了相应的路径配置。
常用插件安装
Vue Router
Vue Router 是 Vue 官方的路由管理器,用于构建单页面应用。
-
安装 Vue Router:
npm install vue-router@4 -
创建路由配置文件
src/router/index.ts:import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router' const routes: Array<RouteRecordRaw> = [ { path: '/', name: 'Home', component: () => import('../views/Home.vue') }, { path: '/about', name: 'About', component: () => import('../views/About.vue') } ] const router = createRouter({ history: createWebHistory(), routes }) export default router -
创建视图组件
src/views/Home.vue和src/views/About.vue:<!-- Home.vue --> <template> <div> <h1>Home Page</h1> <router-link to="/about">Go to About</router-link> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' export default defineComponent({ name: 'Home' }) </script> -
在
src/main.ts中注册路由:import { createApp } from 'vue' import App from './App.vue' import router from './router' const app = createApp(App) app.use(router) app.mount('#app')
Pinia
Pinia 是 Vue 官方的状态管理库,是 Vuex 的替代品。
-
安装 Pinia:
npm install pinia -
创建 store
src/store/counter.ts:import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => ({ count: 0 }), actions: { increment() { this.count++ } } }) -
在
src/main.ts中注册 Pinia:import { createApp } from 'vue' import App from './App.vue' import router from './router' import { createPinia } from 'pinia' const app = createApp(App) app.use(router) app.use(createPinia()) app.mount('#app') -
在组件中使用 store:
<template> <div> <p>Count: {{ counter.count }}</p> <button @click="counter.increment">Increment</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import { useCounterStore } from '@/store/counter' export default defineComponent({ name: 'Home', setup() { const counter = useCounterStore() return { counter } } }) </script>
开发流程
启动开发服务器
在项目根目录下运行:
npm run dev
这将启动 Vite 开发服务器,默认在 http://localhost:3000 运行应用。开发服务器支持热模块替换(HMR),修改代码后页面会自动更新。
构建生产版本
当项目准备部署时,运行:
npm run build
这将在 dist 目录下生成优化后的生产版本文件。
预览生产版本
构建完成后,可以运行以下命令预览生产版本:
npm run preview
实战示例:创建一个简单的待办事项应用
让我们通过创建一个简单的待办事项应用来实践所学知识。
-
创建
src/components/TodoList.vue组件:<template> <div> <h2>Todo List</h2> <div> <input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a new todo" /> <button @click="addTodo">Add</button> </div> <ul> <li v-for="(todo, index) in todos" :key="index"> {{ todo }} <button @click="removeTodo(index)">Remove</button> </li> </ul> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue' export default defineComponent({ name: 'TodoList', setup() { const newTodo = ref('') const todos = ref<string[]>([]) const addTodo = () => { if (newTodo.value.trim()) { todos.value.push(newTodo.value) newTodo.value = '' } } const removeTodo = (index: number) => { todos.value.splice(index, 1) } return { newTodo, todos, addTodo, removeTodo } } }) </script> -
在
App.vue中使用这个组件:<template> <div id="app"> <TodoList /> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import TodoList from './components/TodoList.vue' export default defineComponent({ name: 'App', components: { TodoList } }) </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; text-align: center; color: #2c3e50; margin-top: 60px; } input { padding: 8px; margin-right: 8px; } button { padding: 8px 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; } button:hover { background-color: #45a049; } ul { list-style-type: none; padding: 0; } li { display: flex; justify-content: space-between; align-items: center; padding: 8px; border-bottom: 1px solid #ddd; } </style>
现在,你应该可以在浏览器中看到一个简单的待办事项应用,可以添加和删除待办事项。
总结与进阶方向
通过本文,我们学习了如何从零开始搭建一个基于 Vite+Vue3+TypeScript 的工程模板,包括:
- 环境准备和项目创建
- 项目结构解析
- 基础配置(TypeScript 和 Vite)
- 安装常用插件(Vue Router 和 Pinia)
- 开发流程
- 实战示例
进阶方向可以包括:
- UI 组件库集成:如 Element Plus、Ant Design Vue 等
- CSS 预处理器:如 Sass、Less
- 代码规范工具:如 ESLint、Prettier
- 单元测试:如 Vitest、Jest
- API 集成:使用 Axios 或 Fetch 与后端 API 交互
- 构建优化:代码分割、懒加载等
希望本文能帮助你快速上手 Vite+Vue3+TypeScript 的开发,构建出高质量的前端应用!觉得有用就点个关注!我会持续分享更多实用工具和效率技巧。想直接体验?各类免费、开箱即用的在线工具,都在我的【星点工具箱】网站等你来玩!