1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 06:38:07 +02:00

[api-minor] Attempt to improve support for using the PDF.js builds with Vite

Similar to Webpack there's apparently other bundlers that will not leave `import`-calls alone unless magic comments are used.
Hence we extend the builder to also append `/* @vite-ignore */` comments to `import`-calls, in order to attempt to improve support for using the PDF.js builds together with Vite.

This patch also renames `__non_webpack_import__` to `__raw_import__` since the functionality is no longer bundler-specific.

***PLEASE NOTE:*** This patch is provided as-is, and it does *not* mean that the PDF.js project can/will provide official support for Vite.
This commit is contained in:
Jonas Jenwald 2025-03-27 21:31:27 +01:00
parent 34136d7775
commit 8bcc3664c9
8 changed files with 19 additions and 12 deletions

View file

@ -76,7 +76,7 @@ export default [
globals: { globals: {
...globals.worker, ...globals.worker,
PDFJSDev: "readonly", PDFJSDev: "readonly",
__non_webpack_import__: "readonly", __raw_import__: "readonly",
}, },
ecmaVersion: 2025, ecmaVersion: 2025,

View file

@ -153,18 +153,22 @@ function babelPluginPDFJSPreprocessor(babel, ctx) {
path.replaceWith(t.inherits(t.valueToNode(result), path.node)); path.replaceWith(t.inherits(t.valueToNode(result), path.node));
} }
if (t.isIdentifier(node.callee, { name: "__non_webpack_import__" })) { if (t.isIdentifier(node.callee, { name: "__raw_import__" })) {
if (node.arguments.length !== 1) { if (node.arguments.length !== 1) {
throw new Error("Invalid `__non_webpack_import__` usage."); throw new Error("Invalid `__raw_import__` usage.");
} }
// Replace it with a standard `import`-call and // Replace it with a standard `import`-call and attempt to ensure that
// ensure that Webpack will leave it alone. // various bundlers will leave it alone; this *must* include Webpack.
const source = node.arguments[0]; const source = node.arguments[0];
source.leadingComments = [ source.leadingComments = [
{ {
type: "CommentBlock", type: "CommentBlock",
value: "webpackIgnore: true", value: "webpackIgnore: true",
}, },
{
type: "CommentBlock",
value: "@vite-ignore",
},
]; ];
path.replaceWith(t.importExpression(source)); path.replaceWith(t.importExpression(source));
} }

View file

@ -1,4 +1,7 @@
import { Test } from "import-name"; import { Test } from "import-name";
import { Test2 } from './non-alias'; import { Test2 } from './non-alias';
export { Test3 } from "import-name"; export { Test3 } from "import-name";
await import(/*webpackIgnore: true*/"./non-alias"); await import(
/*webpackIgnore: true*/
/*@vite-ignore*/
"./non-alias");

View file

@ -1,4 +1,4 @@
import { Test } from 'import-alias'; import { Test } from 'import-alias';
import { Test2 } from './non-alias'; import { Test2 } from './non-alias';
export { Test3 } from 'import-alias'; export { Test3 } from 'import-alias';
await __non_webpack_import__("./non-alias"); await __raw_import__("./non-alias");

View file

@ -57,7 +57,7 @@ class JpxImage {
try { try {
const mod = await (typeof PDFJSDev === "undefined" const mod = await (typeof PDFJSDev === "undefined"
? import(path) // eslint-disable-line no-unsanitized/method ? import(path) // eslint-disable-line no-unsanitized/method
: __non_webpack_import__(path)); : __raw_import__(path));
instance = mod.default(); instance = mod.default();
} catch (e) { } catch (e) {
warn(`JpxImage#getJsModule: ${e}`); warn(`JpxImage#getJsModule: ${e}`);

View file

@ -2416,7 +2416,7 @@ class PDFWorker {
const worker = const worker =
typeof PDFJSDev === "undefined" typeof PDFJSDev === "undefined"
? await import("pdfjs/pdf.worker.js") ? await import("pdfjs/pdf.worker.js")
: await __non_webpack_import__(this.workerSrc); : await __raw_import__(this.workerSrc);
return worker.WorkerMessageHandler; return worker.WorkerMessageHandler;
}; };

View file

@ -286,7 +286,7 @@ const PDFViewerApplication = {
const { PDFBug } = const { PDFBug } =
typeof PDFJSDev === "undefined" typeof PDFJSDev === "undefined"
? await import(AppOptions.get("debuggerSrc")) // eslint-disable-line no-unsanitized/method ? await import(AppOptions.get("debuggerSrc")) // eslint-disable-line no-unsanitized/method
: await __non_webpack_import__(AppOptions.get("debuggerSrc")); : await __raw_import__(AppOptions.get("debuggerSrc"));
this._PDFBug = PDFBug; this._PDFBug = PDFBug;
}; };
@ -299,7 +299,7 @@ const PDFViewerApplication = {
if (typeof PDFJSDev === "undefined") { if (typeof PDFJSDev === "undefined") {
globalThis.pdfjsWorker = await import("pdfjs/pdf.worker.js"); globalThis.pdfjsWorker = await import("pdfjs/pdf.worker.js");
} else { } else {
await __non_webpack_import__(PDFWorker.workerSrc); await __raw_import__(PDFWorker.workerSrc);
} }
} catch (ex) { } catch (ex) {
console.error("_parseHashParams:", ex); console.error("_parseHashParams:", ex);

View file

@ -39,7 +39,7 @@ class GenericScripting {
const sandbox = const sandbox =
typeof PDFJSDev === "undefined" typeof PDFJSDev === "undefined"
? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method
: __non_webpack_import__(sandboxBundleSrc); : __raw_import__(sandboxBundleSrc);
sandbox sandbox
.then(pdfjsSandbox => { .then(pdfjsSandbox => {
resolve(pdfjsSandbox.QuickJSSandbox()); resolve(pdfjsSandbox.QuickJSSandbox());