Since the nuxt 3.4.0 update the pinia store can no longer be used in composeables.
//example composable
import { useAuthStore } from '~/store/auth-store';
const authStore = useAuthStore();
export function doSomethingWithStore() {
return authStore.checkAuthUser;
}
you will now receive the below error
getActivePinia was called with no active Pinia. Did you forget to install pinia? const pinia = createPinia() app.use(pinia) This will fail in production.
see stackblitz example
https://stackblitz.com/edit/broken-pinia-store-in-composeables?file=composables%2FthisBreaks.js,nuxt.config.ts
2
Answers
You wrongly installed the @pinia/nuxt module in
nuxt.config.ts
. ThebuildModules
property no longer exists in Nuxt 3, you have to usemodules
instead. (And you can tell by the Typescript error you get):Second point, you also need to call the
useAuthStore
from within the composable function, otherwise it’s trying to load the store before pinia actually loaded. It’s gonna get called when the file is imported, not when the composable is used.See a working stackblitz
It is because
const authStore = useAuthStore();
declared outside any function like you did is called at some early point of application startup and definitely before Pinia instance is properly initialized inside Vue instance.Like this it will work:
Safe places to do Pinia calls (might not be a complete list):
<script setup>
<template>
sectiondefineNuxtMiddleware