Dev: `better-auth/client/plugins` fails to resolve when auth is enabled (the `better-auth/client` alias matches it as a prefix)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript, vite
- Domaine
- devtools
Piste de recherche
Lis packages/void/src/plugin-routing.ts autour des alias Better Auth aux lignes 616–622 et vérifie comment Vite fait correspondre les alias de chaîne aux sous-chemins. Reproduis le problème avec l’authentification activée et un import depuis better-auth/client/plugins ; compare la résolution en développement au comportement du build. Le travail est terminé lorsque l’import du plugin est résolu dans void dev et que les alias Better Auth existants continuent de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
With auth enabled, void dev aliases better-auth/client (and /react, /vue, /svelte, /solid) to absolute file paths. A string alias in Vite also matches subpaths, so better-auth/client/plugins, where Better Auth's client plugins such as adminClient() live, is rewritten to …/better-auth/dist/client/index.mjs/plugins, which doesn't exist. Any app that passes a Better Auth client plugin to createAuthClient breaks in dev. void build is not affected, because the alias is only added for serve.
Steps to reproduce
-
Enable auth in
void.config.ts:auth: { providers: ['email'] }. -
Add
better-authas a dependency (the same version Void uses). -
Create a client with a plugin and import it from a page:
// src/lib/auth-client.ts import { adminClient } from 'better-auth/client/plugins'; import { createAuthClient } from 'void/client'; export const authClient = createAuthClient({ basePath: '/api/auth', plugins: [adminClient()], }); -
Run
void devand open that page.
Actual behavior
- Client:
Pre-transform error: Failed to resolve import "better-auth/client/plugins" from "src/lib/auth-client.ts". Does the file exist? - SSR: the page returns 500 with
Error: No such module "workers/runner-worker/file:/…/better-auth/dist/client/plugins/index.mjs".
Expected behavior
better-auth/client/plugins resolves to better-auth/dist/client/plugins/index.mjs, as it does in void build and in Node.
Cause
packages/void/src/plugin-routing.ts (main @ 6ba3dbcc3a, lines 616–622):
const betterAuthSubpaths = ['client', 'react', 'vue', 'svelte', 'solid'];
const resolvedAliases = betterAuthSubpaths.flatMap((sub) => {
try {
return [{ find: `better-auth/${sub}`, replacement: resolveFile(`better-auth/${sub}`) }];
} catch {
return [];
}
});
A string find matches the exact id and any id that starts with find + '/', replacing the prefix. resolveFile('better-auth/client') is …/dist/client/index.mjs, so better-auth/client/plugins becomes …/dist/client/index.mjs/plugins.
Possible fix
Anchor the patterns so they only match the exact specifier, and pre-resolve client/plugins too if it should avoid the lazy-discovery reload the comment mentions:
const betterAuthSubpaths = ['client', 'client/plugins', 'react', 'vue', 'svelte', 'solid'];
// …
return [{ find: new RegExp(`^better-auth/${sub}$`), replacement: resolveFile(`better-auth/${sub}`) }];
Workaround
A plugin listed after voidPlugin() adds an exact-match alias. Aliases from a later plugin's config hook are tried first, so this one wins:
// vite.config.ts
import { createRequire } from 'node:module';
import type { Plugin } from 'vite-plus';
const require = createRequire(import.meta.url);
function betterAuthClientPlugins(): Plugin {
return {
name: 'better-auth-client-plugins',
config: () => ({
resolve: {
alias: [
{
find: /^better-auth\/client\/plugins$/,
replacement: require.resolve('better-auth/client/plugins'),
},
],
},
}),
};
}
// plugins: [voidPlugin(), voidReact(), betterAuthClientPlugins()]
Related
#554 edits the same block (adds authConfigEnvironmentConfig to the returned config) but keeps the prefix aliases.
Environment
- void 1.2.1 (also on 1.1.12), better-auth 1.7.11
- vite-plus 1.3.0, Node 22.23.3, macOS 26.6
- Langage dominant
- TypeScript
- Étoiles
- 402
- Forks
- 32
- Merge moyen
- 8 h 32 min
- PR mergées (30 j)
- 111
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de voidzero-dev/void
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
voidzero-dev/void#529 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
voidzero-dev/void#428 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 53/100
voidzero-dev/void#567 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
voidzero-dev/void#564 ·
Les mainteneurs répondent en général sous 1 jour
-
Navigation commit failure leaves the loading state active and causes inconsistent internal stateOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
voidzero-dev/void#562 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de voidzero-dev/void
Issues similaires
-
[Feature]: 建议导入源后,自动切换到新导入的源Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
lyswhut/lx-music-desktop#3026 ·
-
area: ci type: test
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
schlessera/brain-kit#2769 ·
Les mainteneurs répondent en général sous 1 jour
-
Read a vector index's quantization back on Neo4j 2026.10, which reports vector.quantization.typeOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
liberation-data/drivine#231 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
alveusgg/alveusgg#2502 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour