From 49a7039359c4811b7503fad8231ec156eec89fa6 Mon Sep 17 00:00:00 2001
From: Eduardo San Martin Morote <posva13@gmail.com>
Date: Sun, 3 Nov 2024 09:18:26 +0100
Subject: [PATCH] fix: dedupe pinia

Fix #2820
---
 packages/nuxt/src/module.ts | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts
index 972922194e..89dd7efaf5 100644
--- a/packages/nuxt/src/module.ts
+++ b/packages/nuxt/src/module.ts
@@ -7,7 +7,6 @@ import {
   isNuxtMajorVersion,
   addImports,
   createResolver,
-  resolveModule,
   addImportsDir,
 } from '@nuxt/kit'
 import type { NuxtModule } from '@nuxt/schema'
@@ -63,15 +62,14 @@ const module: NuxtModule<ModuleOptions> = defineNuxtModule<ModuleOptions>({
     // Transpile runtime
     nuxt.options.build.transpile.push(resolve(runtimeDir))
 
-    // This alias broke in Nuxt 3 so only add it in Nuxt 2
-    if (isNuxtMajorVersion(2, nuxt)) {
-      // Make sure we use the mjs build for pinia
-      nuxt.options.alias.pinia =
-        nuxt.options.alias.pinia ||
-        // FIXME: remove this deprecated call. Ensure it works in Nuxt 2 to 3
-        resolveModule('pinia/dist/pinia.mjs', {
-          paths: [nuxt.options.rootDir, import.meta.url],
-        })
+    // dedupe pinia only if not building for SSR
+    // https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/src/index.ts#L221
+    if (!nuxt.options.vite?.build?.ssr) {
+      nuxt.options.vite.resolve ??= {}
+      nuxt.options.vite.resolve.dedupe ??= []
+      if (!nuxt.options.vite.resolve.dedupe.includes('pinia')) {
+        nuxt.options.vite.resolve.dedupe.push('pinia')
+      }
     }
 
     nuxt.hook('prepare:types', ({ references }) => {