Lee преди 3 седмици
родител
ревизия
3674103b02
променени са 3 файла, в които са добавени 21 реда и са изтрити 33 реда
  1. 1 1
      package.json
  2. 17 11
      src/components/view_file/vendors/pdf/PdfView.vue
  3. 3 21
      vite.config.ts

+ 1 - 1
package.json

@@ -1,7 +1,7 @@
 {
     "name": "huijia-viewfile",
     "private": false,
-    "version": "0.1.4",
+    "version": "0.1.5",
     "type": "module",
     "scripts": {
         "dev": "vite",

+ 17 - 11
src/components/view_file/vendors/pdf/PdfView.vue

@@ -20,42 +20,48 @@
 <script setup>
 import { ref, onMounted } from "vue"
 import * as PDF from "pdfjs-dist"
+// 引入 Vite 识别的 worker URL(处理哈希路径)
+import localWorkerUrl from "pdfjs-dist/build/pdf.worker.mjs?url"
 
 let workerBlobUrl = null
 
 const initWorker = async () => {
   if (workerBlobUrl) return
 
-  // 尝试多个可能的 Worker 路径
+  const pdfjsVersion = PDF.version
   const urls = [
-    // 1. 生产环境:相对于库文件的路径(已在 build:lib 时拷贝并重命名为 .js)
+    // 1. 优先使用 CDN,规避所有本地服务器配置问题
+    `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsVersion}/pdf.worker.min.mjs`,
+    `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsVersion}/build/pdf.worker.min.mjs`,
+    `https://unpkg.com/pdfjs-dist@${pdfjsVersion}/build/pdf.worker.min.mjs`,
+    // 2. 本地备选:Vite 处理后的路径
+    localWorkerUrl,
+    // 3. 库模式下的路径
     new URL("./pdf.worker.js", import.meta.url).toString(),
-    // 2. 开发环境:node_modules 路径
-    new URL("pdfjs-dist/build/pdf.worker.mjs", import.meta.url).toString(),
   ]
 
   let lastError = null
   for (const url of urls) {
     try {
-      // 方案:通过 Fetch 获取 worker 内容并转换为 Blob URL
-      // 这样可以绕过服务器对 .mjs 文件的 MIME 类型校验(application/octet-stream)
       const response = await fetch(url)
       if (!response.ok) continue
 
       const arrayBuffer = await response.arrayBuffer()
-      const blob = new Blob([arrayBuffer], { type: "application/javascript" })
+      // 强制指定为 ESM 模块
+      const blob = new Blob([arrayBuffer], { type: "text/javascript" })
       workerBlobUrl = URL.createObjectURL(blob)
       PDF.GlobalWorkerOptions.workerSrc = workerBlobUrl
-      return // 成功加载则退出
+      console.log("PDF Worker loaded successfully from:", url)
+      return
     } catch (e) {
       lastError = e
       continue
     }
   }
 
-  console.warn("All PDF worker paths failed, using fallback", lastError)
-  // 最后的保底方案
-  PDF.GlobalWorkerOptions.workerSrc = urls[urls.length - 1]
+  console.error("All PDF worker paths failed", lastError)
+  // 最后保底:直接尝试 localWorkerUrl
+  PDF.GlobalWorkerOptions.workerSrc = localWorkerUrl
 }
 
 const props = defineProps({

+ 3 - 21
vite.config.ts

@@ -2,7 +2,7 @@
  * @Author: LiZhiWei
  * @Date: 2025-04-24 15:29:01
  * @LastEditors: LiZhiWei
- * @LastEditTime: 2025-12-30 15:41:33
+ * @LastEditTime: 2025-12-30 15:47:25
  * @Description:
  */
 import { defineConfig } from "vite"
@@ -85,26 +85,8 @@ export default defineConfig(({ mode }) => {
   return {
     plugins,
     resolve,
-    worker: workerConfig,
-    build: {
-      rollupOptions: {
-        output: {
-          chunkFileNames: (chunkInfo: any) => {
-            if (chunkInfo.name.includes("pdf.worker")) {
-              return "assets/pdf.worker.js"
-            }
-            return "assets/[name]-[hash].js"
-          },
-          entryFileNames: "assets/[name]-[hash].js",
-          assetFileNames: (assetInfo: any) => {
-            const name = assetInfo.name || ""
-            if (name.endsWith(".mjs") || name.includes("pdf.worker")) {
-              return "assets/[name]-[hash].js"
-            }
-            return "assets/[name]-[hash].[ext]"
-          },
-        },
-      },
+    worker: {
+      format: "es",
     },
   }
 })