安装
本页面将指导您如何在项目中安装和配置 Pinia。
兼容性
Pinia 需要 Vue 2.7+ 或 Vue 3.2+。如果您使用的是 Vue 2,还需要安装组合式 API:@vue/composition-api
。
包管理器安装
bash
npm install pinia
bash
yarn add pinia
bash
pnpm add pinia
CDN 安装
如果您不使用构建工具,可以通过 CDN 使用 Pinia:
html
<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/pinia@next"></script>
创建 Pinia 实例
安装完成后,您需要创建一个 Pinia 实例并将其传递给 Vue 应用:
Vue 3
javascript
// 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')
Vue 2
javascript
// main.js
import Vue from 'vue'
import { createPinia, PiniaVuePlugin } from 'pinia'
import App from './App.vue'
Vue.use(PiniaVuePlugin)
const pinia = createPinia()
new Vue({
el: '#app',
pinia,
render: h => h(App)
})
TypeScript 支持
Pinia 提供了完整的 TypeScript 支持。如果您使用 TypeScript,无需额外配置即可享受类型安全的好处。
类型定义
typescript
// stores/types.ts
export interface User {
id: number
name: string
email: string
role: 'admin' | 'user'
}
export interface UserState {
currentUser: User | null
users: User[]
loading: boolean
}
typescript
// stores/user.ts
import { defineStore } from 'pinia'
import type { User, UserState } from './types'
export const useUserStore = defineStore('user', {
state: (): UserState => ({
currentUser: null,
users: [],
loading: false
}),
getters: {
isAdmin: (state): boolean => {
return state.currentUser?.role === 'admin'
}
},
actions: {
async fetchUser(id: number): Promise<User> {
this.loading = true
try {
const user = await api.getUser(id)
this.currentUser = user
return user
} finally {
this.loading = false
}
}
}
})
Nuxt.js 集成
如果您使用 Nuxt.js,可以使用官方的 @pinia/nuxt
模块:
bash
npm install pinia @pinia/nuxt
javascript
// nuxt.config.js
export default {
modules: [
'@pinia/nuxt'
]
}
Vite 配置
如果您使用 Vite,可能需要配置路径别名:
javascript
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
}
})
开发工具
Vue DevTools
Pinia 完全支持 Vue DevTools。安装 Vue DevTools 浏览器扩展后,您可以:
- 查看所有 stores 的状态
- 时间旅行调试
- 编辑状态值
- 追踪 actions 的执行
VS Code 扩展
推荐安装以下 VS Code 扩展以获得更好的开发体验:
- Vetur 或 Volar:Vue 语法高亮和智能提示
- TypeScript Vue Plugin (Volar):Vue 3 + TypeScript 支持
- Auto Rename Tag:自动重命名配对标签
- Bracket Pair Colorizer:括号配对着色
项目结构建议
推荐的项目结构:
src/
├── components/
├── views/
├── stores/
│ ├── index.ts # 导出所有 stores
│ ├── types.ts # 类型定义
│ ├── auth.ts # 认证相关
│ ├── user.ts # 用户相关
│ └── product.ts # 产品相关
├── api/
├── utils/
└── main.ts
stores/index.ts
typescript
// stores/index.ts
export { useAuthStore } from './auth'
export { useUserStore } from './user'
export { useProductStore } from './product'
// 类型导出
export type * from './types'
环境变量配置
您可以根据不同环境配置 Pinia:
javascript
// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
// 开发环境启用调试
if (import.meta.env.DEV) {
pinia.use(({ store }) => {
store.$subscribe((mutation, state) => {
console.log('🍍 Pinia mutation:', mutation)
console.log('🍍 New state:', state)
})
})
}
app.use(pinia)
app.mount('#app')
验证安装
创建一个简单的测试 store 来验证安装是否成功:
javascript
// stores/test.js
import { defineStore } from 'pinia'
export const useTestStore = defineStore('test', {
state: () => ({
message: 'Pinia 安装成功!'
})
})
vue
<!-- App.vue -->
<template>
<div>
<h1>{{ testStore.message }}</h1>
</div>
</template>
<script setup>
import { useTestStore } from '@/stores/test'
const testStore = useTestStore()
</script>
如果页面显示 "Pinia 安装成功!",说明安装配置正确。
下一步
现在您已经成功安装了 Pinia,让我们继续学习:
准备好开始使用 Pinia 了吗?🚀