| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/env node
- /**
- * 把 pdf.js 的 worker 复制到 public/。
- *
- * ## 为什么要这一步
- *
- * pdf.js 需要 worker 文件从**同源**加载(`/pdf.worker.js`),
- * 但它只有新版 `.min.mjs`,而开发服务器对 `public/` 下的 `.mjs` 不解析,
- * 因此复制成 `.js`。
- *
- * ## 为什么不进 git
- *
- * 1.3 MB 的构建产物,随 pdfjs 版本变化,没理由占仓库空间。
- * 由 `postinstall` 自动生成,克隆后 `npm install` 即得。
- */
- import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
- import { dirname, resolve } from 'node:path';
- import { fileURLToPath } from 'node:url';
- const here = dirname(fileURLToPath(import.meta.url));
- const root = resolve(here, '..');
- const src = resolve(root, 'node_modules/pdfjs-dist/build/pdf.worker.min.mjs');
- const dest = resolve(root, 'public/pdf.worker.js');
- if (!existsSync(src)) {
- // 未安装 pdfjs-dist(如只装了部分依赖)时静默跳过,不阻塞 npm install
- console.log('[copy-pdf-worker] 跳过:未找到 pdfjs-dist');
- process.exit(0);
- }
- mkdirSync(dirname(dest), { recursive: true });
- copyFileSync(src, dest);
- console.log('[copy-pdf-worker] 已生成 public/pdf.worker.js');
- /*
- * 同时生成 pdfjs 版本常量(2026-11-13)。
- *
- * ## 为什么需要
- *
- * `pdf-preview.ts` 用版本号做 worker 的缓存键。之前是手写常量,
- * pdfjs 从 6.4 降到 4.10 时忘了改 → 浏览器命中缓存的旧 worker
- * → 主包与 worker 版本不匹配 → PDF 永远卡在「正在加载」。
- *
- * 现在由本脚本把 `node_modules/pdfjs-dist/package.json` 的 version 写进源码,
- * 依赖一变缓存键就变,不可能再忘。
- */
- const versionFile = resolve(root, 'src/app/components/preview/pdf-preview/pdfjs-version.generated.ts');
- const pkgPath = resolve(root, 'node_modules/pdfjs-dist/package.json');
- if (existsSync(pkgPath)) {
- const { version } = JSON.parse(readFileSync(pkgPath, 'utf8'));
- writeFileSync(
- versionFile,
- `/* 由 scripts/copy-pdf-worker.mjs 自动生成,请勿手改。 */\n` +
- `export const PDFJS_VERSION = '${version}';\n`,
- 'utf8',
- );
- console.log(`[copy-pdf-worker] 已生成 pdfjs 版本常量:${version}`);
- }
|