slothis · Deutsch

Vue + Quasar: '#q-app/wrappers' Fehler beheben

2025-03-20 · Aktualisiert: 2026-08-11 · Original (Koreanisch)

Dieser Artikel wurde mit KI-Unterstützung aus dem koreanischen Original übersetzt. Das koreanische Original lesen →
Ein wütender grüner Enten-Charakter, der einen Esstisch umwirft
Aaaarghhh


Wahrscheinlich taucht bei dir dieser Fehler auf, oder der darunter:
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" 
Oder:
 ERROR(vue-tsc)  Cannot find module '#q-app/wrappers' or its corresponding type declarations.

Meine aktuelle Umgebung:
  • vue 3.4.18
  • quasar 2.16.0
  • quasar/app-vite 2.1.4
Ich weiß nicht genau, wann Quasar die Syntax geändert hat, aber in meiner aktuellen Version ist es anders als früher. Besonders wenn man das CLI zusammen mit Vite nutzt, wird man unweigerlich auf dieses Problem stoßen. Referenz

import { defineConfig } from "@quasar/app-vite";

Das war die alte Methode. Jetzt muss man es so machen:
import { defineConfig } from '#q-app/wrappers'

Dabei entsteht der Fehler, dass #q-app nicht importiert werden kann. Wenn man ChatGPT oder Cursor.ai fragt, raten sie einem, den node_modules-Ordner komplett zu löschen und npm install neu auszuführen, quasar clean --qconf zu probieren oder einfach die alte Import-Methode zu nutzen. Da die Änderung noch recht neu ist, haben die KIs das wohl noch nicht gelernt.

Das eigentliche Problem ist ein Bug. Es gibt zwar einen Patch, aber der wirkt eher wie ein Workaround als eine perfekte Lösung.

Wenn in der tsconfig.json der Wert baseUrl definiert ist, kommt es zu einem Konflikt mit der tsconfig.json, die Quasar selbst erstellt und verwendet (Quasar nutzt /.quasar/tsconfig.json, was unter dem extends-Schlüssel definiert ist).
Zugehöriges GitHub-Issue

Die Lösung

Lösche die Einträge baseUrl und path aus deiner tsconfig.json.

Hier ist eine empfohlene tsconfig.json-Datei:
{
  "extends": "./.quasar/tsconfig.json",
  "compilerOptions": {
    "esModuleInterop": true,
    "skipLibCheck": true,
    "target": "esnext",
    "allowJs": true,
    "resolveJsonModule": true,
    "moduleDetection": "force",
    "isolatedModules": true,
    "module": "preserve",
    "noEmit": true,
    "lib": [
      "esnext",
      "dom",
      "dom.iterable"
    ]
  },
In der vite.config.js gibt es übrigens ähnliche Einstellungen. Diese kannst du aber ignorieren, da es sich um Alias-Pfade für Vite handelt. Der Konflikt tritt ausschließlich bei der tsconfig auf.