slothis · 繁體中文

解決 Vue + Quasar 報錯:Cannot find module '#q-app/wrappers'

2025-03-20 · 更新於: 2026-08-11 · 韓文原文

本文由 AI 輔助翻譯自韓文原文。 閱讀韓文原文 →
生氣的綠色鴨子角色掀翻飯桌的樣子
啊啊啊啊啊崩潰


可能會出現以下這種錯誤,或是再下面那種錯誤。
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" 
或者
 ERROR(vue-tsc)  Cannot find module '#q-app/wrappers' or its corresponding type declarations.

目前使用的環境
  • vue 3.4.18
  • quasar 2.16.0
  • quasar/app-vite 2.1.4
不知道 Quasar 是從什麼時候開始改變使用方式的,但在我目前使用的版本中,已經和以前的用法不同了。特別是搭配 Vite 使用 CLI 的情況下,一定會遇到這個問題。參考資料

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

如果這是以前的寫法,那現在
import { defineConfig } from '#q-app/wrappers'

必須像這樣 import 才行。這時候會報錯說無法 import #q-app,如果去問 ChatGPT 或 Cursor.ai 等 AI,它們會叫你把 node_modules 全部刪掉再重新 npm install,或是試試 quasar clean --qconf,不然就是叫你用以前的方式 import。因為這是最近才變更的項目,AI 似乎還沒學習到。

根本的問題其實是 Bug 造成的。雖然已經有修補程式,但看起來比較像是臨時的解決方案,還不夠完美。

如果在 tsconfig.json 中定義了 baseUrl,就會和 Quasar 自己產生並使用的 tsconfig.json 發生衝突(Quasar 使用的是定義在 extends 鍵值中的 /.quasar/tsconfig.json)。
相關的 GitHub Issue

解決方法

刪除 tsconfig.json 中的 baseUrl 和 path 項目。

以下是建議的 tsconfig.json 檔案內容。
{
  "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"
    ]
  },
順帶一提,vite.config.js 裡也有類似的設定,但因為那是給 Vite 參考的 alias 路徑,所以可以忽略。只有 tsconfig 會發生衝突。