From a6e06e89635a9b0b525fbde62dffd1a5f2ec5454 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Wed, 8 Dec 2021 00:38:36 +0800 Subject: [PATCH] fix: now cjs shims should only be injected when it's actually used --- assets/cjs_shims.js | 7 ++++++- assets/esm_shims.js | 7 ++++--- src/esbuild/index.ts | 2 +- test/snapshots/index.test.ts.md | 11 +++++++---- test/snapshots/index.test.ts.snap | Bin 2493 -> 2537 bytes 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/assets/cjs_shims.js b/assets/cjs_shims.js index a2056370..bcd355e8 100644 --- a/assets/cjs_shims.js +++ b/assets/cjs_shims.js @@ -1,7 +1,12 @@ // Shim globals in cjs bundle +// There's a weird bug that esbuild will always inject importMetaUrl +// if we export it as `const importMetaUrl = ... __filename ...` +// But using a function will not cause this issue -export const importMetaUrlShim = +const getImportMetaUrl = () => typeof document === 'undefined' ? new URL('file:' + __filename).href : (document.currentScript && document.currentScript.src) || new URL('main.js', document.baseURI).href + +export const importMetaUrl = /* @__PURE__ */ getImportMetaUrl() diff --git a/assets/esm_shims.js b/assets/esm_shims.js index 6749c80c..c238cb33 100644 --- a/assets/esm_shims.js +++ b/assets/esm_shims.js @@ -2,7 +2,8 @@ import { fileURLToPath } from 'url' import path from 'path' -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) +const getFilename = () => fileURLToPath(import.meta.url) +const getDirname = () => path.dirname(getFilename()) -export { __dirname, __filename } +export const __dirname = /* @__PURE__ */ getDirname() +export const __filename = /* @__PURE__ */ getFilename() diff --git a/src/esbuild/index.ts b/src/esbuild/index.ts index e9963325..b2c1e4a2 100644 --- a/src/esbuild/index.ts +++ b/src/esbuild/index.ts @@ -158,7 +158,7 @@ export async function runEsbuild( define: { ...(format === 'cjs' && injectShims ? { - 'import.meta.url': 'importMetaUrlShim', + 'import.meta.url': 'importMetaUrl', } : {}), ...options.define, diff --git a/test/snapshots/index.test.ts.md b/test/snapshots/index.test.ts.md index 50f38890..0aadba81 100644 --- a/test/snapshots/index.test.ts.md +++ b/test/snapshots/index.test.ts.md @@ -393,10 +393,11 @@ Generated by [AVA](https://avajs.dev). });␊ ␊ // ../../../assets/cjs_shims.js␊ - var importMetaUrlShim = typeof document === "undefined" ? new URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;␊ + var getImportMetaUrl = () => typeof document === "undefined" ? new URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;␊ + var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();␊ ␊ // input.ts␊ - var input_default = importMetaUrlShim;␊ + var input_default = importMetaUrl;␊ // Annotate the CommonJS export names for ESM import in node:␊ 0 && (module.exports = {});␊ ` @@ -408,8 +409,10 @@ Generated by [AVA](https://avajs.dev). `// ../../../assets/esm_shims.js␊ import { fileURLToPath } from "url";␊ import path from "path";␊ - var __filename = fileURLToPath(import.meta.url);␊ - var __dirname = path.dirname(__filename);␊ + var getFilename = () => fileURLToPath(import.meta.url);␊ + var getDirname = () => path.dirname(getFilename());␊ + var __dirname = /* @__PURE__ */ getDirname();␊ + var __filename = /* @__PURE__ */ getFilename();␊ ␊ // input.ts␊ var a = __dirname;␊ diff --git a/test/snapshots/index.test.ts.snap b/test/snapshots/index.test.ts.snap index e592c402f92dc7c492c3567beac980f4d60504fc..e622ded75465de521c17fd4ebd5bd6d616c4f181 100644 GIT binary patch literal 2537 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 H3oZZv{5;T8