@clerk/react and @clerk/shared do not declare sideEffects: false, which blocks tree-shaking through ClerkProvider
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- nextjs, react, typescript
- Área
- build-system, frontend, performance
Línea de trabajo
Comienza inspeccionando los manifiestos de los paquetes publicados de @clerk/react y @clerk/shared; después, sigue cómo @clerk/react produce dist/ClerkProvider-CNl0Jmp6.mjs. Verifica si los paquetes no tienen efectos secundarios y cómo se combina el provider con los componentes de UI. Se considera terminado cuando los metadatos sean correctos y, si se sigue adelante, el provider ya no incluya código de UI no relacionado; vuelve a ejecutar la medición reportada del bundle de producción.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Package
@clerk/react@6.13.1, @clerk/shared@4.27.1 (reached via @clerk/nextjs@7.7.0)
What
@clerk/nextjs declares "sideEffects": false. Neither of the two packages it stands on does — @clerk/react and @clerk/shared both omit the field entirely, so a bundler must assume every module in them has side effects and cannot drop unreachable exports.
$ node -e "for (const p of ['@clerk/react','@clerk/shared','@clerk/nextjs'])
console.log(p, require(p+'/package.json').sideEffects)"
@clerk/react undefined
@clerk/shared undefined
@clerk/nextjs false
Why it matters downstream
Measured on a Next.js 16 App Router app (Turbopack, Cache Components, @clerk/nextjs@7.7.0), across nine cold production builds:
@clerk/nextjsputs 66,806 bytes gzipped into first load, on every route, becauseClerkProviderlives in the root layout.- With every Clerk UI component deleted from the app — no
<UserButton>, no<SignIn>, no<SignUp>— and the provider resolved past the root barrel, 51,910 gz still remains. That is the floor:ClerkProvideralone.
Two things put it there, and the sideEffects gap is one:
- No
sideEffects: falseon@clerk/react/@clerk/shared, so nothing unreachable can be dropped. @clerk/react's dist is rollup-merged —dist/ClerkProvider-CNl0Jmp6.mjsis a single 59,673-byte file holding the provider and the UI component implementations. Even withsideEffects: false, importing the provider pulls that whole file, because the merge happened at publish time rather than at the consumer's bundler.
So (1) alone is necessary but may not be sufficient — (2) would need the provider split out of the shared chunk for the flag to actually pay. Both together are what would let an app that renders one avatar stop shipping the code for PricingTable, OrganizationProfile, OrganizationSwitcher and the rest.
Ask
Declare "sideEffects": false in @clerk/react and @clerk/shared if it holds (both look side-effect-free from the outside — they are component/hook/util modules), and, if you're open to it, split ClerkProvider out of the merged dist chunk so the flag has something to act on.
Happy to re-run the measurement against a canary if that's useful.
Related
Filed alongside a request for a client-component subpath export on @clerk/nextjs, which is the other half of the same problem for App Router apps.
- Lenguaje dominante
- TypeScript
- Estrellas
- 1.8k
- Forks
- 472
- Merge medio
- 2 d 12 h
- PR fusionados (30 d)
- 222
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de clerk/javascript
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
clerk/javascript#9611 · 1 comentario ·
-
clerk/javascript#9891 · 1 asignado ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 64/100
clerk/javascript#9775 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
clerk/javascript#9770 · 3 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
clerk/javascript#9667 · 1 comentario ·
Todos los issues de clerk/javascript
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
mksglu/context-mode#1200 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
anthropics/claude-code#96687 ·
-
good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
AOSSIE-Org/DebateAI#582 · 2 comentarios ·