Skip to content

Commit 97f275a

Browse files
committed
feat: automatically fix resolve issue
1 parent 957e971 commit 97f275a

File tree

2 files changed

+40
-23
lines changed

2 files changed

+40
-23
lines changed

packages/nuxt/playground/nuxt.config.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,4 @@ export default defineNuxtConfig({
5555
},
5656
],
5757
],
58-
59-
// NOTE: temporary workaround that cannot be put within the nuxt-vuefire module
60-
hooks: {
61-
// cannot be added in nuxt's resolve.alias
62-
'vite:extendConfig': (config, { isServer }) => {
63-
if (isServer) {
64-
config.resolve ??= {}
65-
config.resolve.alias ??= {}
66-
// @ts-ignore
67-
config.resolve.alias['firebase/firestore'] = resolve(
68-
nodeModules,
69-
'firebase/firestore/dist/index.mjs'
70-
)
71-
// @ts-ignore
72-
config.resolve.alias['@firebase/firestore'] = resolve(
73-
nodeModules,
74-
'@firebase/firestore/dist/index.node.mjs'
75-
)
76-
77-
// add any other firebase alias you need
78-
}
79-
},
80-
},
8158
})

packages/nuxt/src/module.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
addServerHandler,
88
createResolver,
99
defineNuxtModule,
10+
resolvePath,
1011
} from '@nuxt/kit'
1112
import type { NuxtModule } from '@nuxt/schema'
1213
// cannot import from firebase-admin because the build fails, maybe a nuxt bug?
@@ -191,6 +192,45 @@ const VueFire: NuxtModule<VueFireNuxtModuleOptions> =
191192
{ from: 'vuefire', name: 'useDatabaseObject' },
192193
])
193194
},
195+
196+
// NOTE: workaround until https://github.com/vitejs/vite/issues/11114 is fixed
197+
hooks: {
198+
// Resolve the correct firebase/firestore path on server only since vite is resolving the wrong one in dev
199+
'vite:extendConfig': async (config, { isServer }) => {
200+
if (isServer) {
201+
config.resolve ??= {}
202+
config.resolve.alias ??= {}
203+
204+
// skip the whole thing if the alias is already set in user config
205+
// @ts-ignore
206+
if (!config.resolve.alias['firebase/firestore']) {
207+
// this gives an absolute path which is needed for the alias to work since the firebase package is not including the dist folder in exports
208+
const resolvedFirestore = await resolvePath('firebase/firestore')
209+
const resolvedFirestoreMJS =
210+
resolvedFirestore.slice(
211+
0,
212+
resolvedFirestore.lastIndexOf('dist')
213+
) + 'dist/index.mjs'
214+
// @ts-ignore
215+
config.resolve.alias['firebase/firestore'] = resolvedFirestoreMJS
216+
217+
const resolvedNamespacedFirestore = await resolvePath(
218+
'@firebase/firestore'
219+
)
220+
const resolvedNamespacedFirestoreMJS =
221+
resolvedNamespacedFirestore.slice(
222+
0,
223+
resolvedNamespacedFirestore.lastIndexOf('dist')
224+
) + 'dist/index.node.mjs'
225+
// @ts-ignore
226+
config.resolve.alias['@firebase/firestore'] =
227+
resolvedNamespacedFirestoreMJS
228+
}
229+
230+
// add any other firebase alias you need
231+
}
232+
},
233+
},
194234
})
195235

196236
// just to have autocomplete and errors

0 commit comments

Comments
 (0)