import引入pdfjs-dist報錯Top-level await is not available、No "GlobalWorkerOptions.workerSrc"等

項目環境

// 1. npm ls vite
├─┬ @vitejs/[email protected]
│ └── [email protected] deduped
├─┬ @vitejs/[email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ └── [email protected] deduped
└── [email protected]

// 2.npm ls pdfjs-dist
└── [email protected]

// 3.node -v
v18.18.0




  • 報錯1:
Top-level await is not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari14" + 2 overrides)

    node_modules/pdfjs-dist/build/pdf.mjs:17349:53:
      17349 │ /******/ __webpack_exports__ = globalThis.pdfjsLib = await (globalThis.pdfjsLibPromise = __webpack_exports__);
  • 原因:vite 不支持頂級的 async/await 語法,需要安裝插件做兼容
  • 解決方案:
    vite.config.ts 安裝並引入 topLevelAwait
npm install vite-plugin-top-level-await -D
// vite.config.ts 文件
// 解決 vite build打包報錯Top-level await is not available
import topLevelAwait from 'vite-plugin-top-level-await'

export default ({ mode }: any) => {
    return defineConfig({
        plugins: [
            topLevelAwait({
                promiseExportName: '__tla',
                promiseImportName: (i) => `__tla_${i}`
            })
        ],
    })
}



  • 報錯2:
Uncaught (in promise) Error: No "GlobalWorkerOptions.workerSrc" specified.
  • 原因:pdfjs-dist 包需要用到 webWorker 線程做大量的計算,需要全局引入 pdfjsWorker
  • 解決方案:從 pdfjs-dist 導入 pdfjsWorker 並掛載到 window 變量上
import * as pdfjsLib from 'pdfjs-dist'
import * as pdfjsWorker from 'pdfjs-dist/build/pdf.worker.mjs'
(window as any).pdfjsWorker = pdfjsWorker



  • 報錯3:
找不到模塊“pdfjs-dist/build/pdf.worker.mjs”或其相應的類型聲明。ts(2307)
  • 原因:如果是 <script setup lang="ts"> 模塊式,引入 pdfjsWorker 需要申明模塊

  • 解決方案:創建模塊聲明文件 並 聲明 pdfjsWorker

// env.d.ts
/// <reference types="vite/client" />
declare module 'pdfjs-dist/build/pdf.worker.mjs';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章