2、环境搭建:创建Vue3项目、安装Pinia依赖、在main.js中注册Pinia、项目结构规划
2.1 创建Vue3项目——选对工具,事半功倍
说实话,很多新手在环境搭建这一步就栽了跟头。我见过太多人因为Node版本不对、脚手架选错,折腾半天还没开始写代码。咱们直接上最稳的方案。
我个人习惯用Vite来创建Vue3项目。为什么?快,真的快。Vite的开发服务器启动速度,比Webpack快了不是一星半点。你想想看,每次改完代码等热更新,那种煎熬我太懂了。
# 确保你的Node.js版本在16以上
node -v
# 使用Vite创建Vue3项目
npm create vite@latest pinia-course -- --template vue
# 进入项目目录
cd pinia-course
# 安装依赖
npm install
项目创建成功后,你会看到这样的目录结构:
pinia-course/
├── node_modules/
├── public/
├── src/
│ ├── assets/
│ ├── components/
│ ├── App.vue
│ └── main.js
├── index.html
├── package.json
├── vite.config.js
└── README.md
2.2 安装Pinia依赖——就一行命令的事
接下来安装Pinia。这一步其实很简单,但有个坑我得提醒你。
npm install pinia
嗯,就这一行。但注意了——不要安装 pinia@next。我记得Pinia刚出的时候,很多人习惯性地装了next版本,结果发现和Vue3正式版不兼容。现在Pinia已经稳定了,直接装最新版就行。
2.3 在main.js中注册Pinia——核心步骤
安装完依赖,接下来就是在入口文件里注册Pinia。这一步很多人会漏掉,然后发现组件里怎么也拿不到store的数据。
// src/main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')
这里有个细节:createPinia() 返回的是一个Pinia实例,然后通过 app.use() 注册到Vue应用中。说白了,这一步就是告诉Vue:「嘿,我要用Pinia来管理状态了,你帮我准备好环境」。
2.4 项目结构规划——好的结构让代码更清爽
项目结构这件事,其实没有绝对的标准。但根据我多年的经验,一个好的结构应该满足三个原则:易查找、易扩展、易维护。
我推荐的结构是这样的:
src/
├── stores/ # Pinia状态管理
│ ├── modules/ # 按功能拆分的store模块
│ │ ├── user.js
│ │ ├── cart.js
│ │ └── app.js
│ └── index.js # 统一导出
├── views/ # 页面组件
├── components/ # 公共组件
├── router/ # 路由配置
├── utils/ # 工具函数
├── api/ # API请求
├── assets/ # 静态资源
├── App.vue
└── main.js
为什么要把stores单独拎出来?你想想看,如果项目里有几十个store文件,散落在各个目录里,找起来得多痛苦。集中管理,一目了然。
| 目录 | 用途 | 说明 |
|---|---|---|
| stores/modules | 按业务模块拆分 | 每个模块一个文件,比如用户、购物车 |
| stores/index.js | 统一导出所有store | 方便其他文件引用,减少import路径 |
| api | 接口请求封装 | 和store解耦,职责单一 |
2.5 验证环境是否搭建成功
环境搭好了,怎么知道对不对?写个最简单的测试:
// src/stores/counter.js
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0
}),
actions: {
increment() {
this.count++
}
}
})
然后在任意组件里引用:
<template>
<div>
<p>计数:{{ counter.count }}</p>
<button @click="counter.increment()">+1</button>
</div>
</template>
<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
</script>
如果页面能正常显示计数,点击按钮数字能增加,恭喜你——环境搭建成功了!
好了,环境搭好了,下一章咱们就开始真正地写Pinia代码了。说实话,环境搭建这一步虽然枯燥,但基础打牢了,后面学起来才顺畅。你想想看,如果连脚手架都跑不起来,还谈什么状态管理?