Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

angular-query-experimental: `import * as ng` in pending-tasks-compat pulls all of @angular/core into the initial bundle

Fermée
#12,319 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@benjavicente y travaille déjà.

Depuis le 25/10/2026.

  • #12386 par @mixelburg — fermée sans fusion

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
52/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
angular, typescript

Piste de recherche

Start with packages/angular-query-experimental/src/pending-tasks-compat.ts, then trace how create-base-query and inject-mutation import it. Compare production bundle output for the Angular 22 lazy route described in the issue, with and without the compat module. Done means injectQuery and injectMutation no longer prevent tree shaking of @angular/core, while builds remain compatible with Angular 16–18.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

package: angular-query
Describe the bug

packages/angular-query-experimental/src/pending-tasks-compat.ts reads PendingTasks through a namespace import:

import * as ng from '@angular/core'
// …
const token = Reflect.get(ng, 'PendingTasks')

Because the namespace object is accessed dynamically, esbuild (Angular's application builder) can't tree-shake @angular/core. create-base-query (injectQuery, injectInfiniteQuery) and inject-mutation import this module, so using them, even only in a lazy-loaded route, puts most of @angular/core into the initial chunk.

This was reported before in #11614. Its author closed it a few minutes later because they were working around it locally. It still reproduces on the latest release (5.104.5, same dist/pending-tasks-compat.mjs), so I'm opening a new issue to track it.

How to reproduce

Angular 22 app with the application builder (esbuild), production build:

  1. provideTanStackQuery(new QueryClient()) in app.config.ts.
  2. A lazy route (loadComponent) whose component calls injectQuery(...).
  3. ng build and compare the initial bundle with and without step 2.
Numbers (our admin app, @tanstack/angular-query-experimental 5.104.1, Angular 22.2)
main-*.js Initial total
As published 512.14 kB 515.56 kB
pending-tasks-compat.mjs patched to a named import 327.05 kB 330.46 kB

Almost all of the difference is @angular/core (raw, from esbuild stats: 140 kB → 409 kB in main). The app code is ~4 kB in both builds.

Expected behavior

Using injectQuery/injectMutation shouldn't stop @angular/core from being tree-shaken.

Notes / possible directions

We know the namespace access is there because the peer range is @angular/core >=16 and PendingTasks only exists from v19, so a plain import { PendingTasks } would break builds on 16–18. Some options:

  • Drop the compat shim when the minimum supported Angular becomes 19 (named import, no Reflect.get).
  • Until then, keep the shim behind a separate entry point or build condition, so apps on ≥19 get the named import.

Workaround we use for now (Angular 22): a pnpm patch that replaces the namespace import with import { InjectionToken, PendingTasks, inject } from "@angular/core" and inject(PendingTasks, { optional: true }).

Versions
  • @tanstack/angular-query-experimental: 5.104.1 (also checked 5.104.5)
  • @angular/core: 22.2.3, application builder (esbuild)
Langage dominant
TypeScript
Étoiles
50.5k
Forks
4.2k
Merge moyen
8 h 21 min
PR mergées (30 j)
621

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de TanStack/query

Toutes les issues de TanStack/query

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.