In a monorepo, importing from different files of a sibling workspace package leads to duplicate code in generated bundle.
Consider this monorepo:
packages/a/1.ts imports ./shared
packages/a/2.ts imports ./shared
packages/a/shared.ts — this import gets duplicated in esbuild-runner bundle
packages/b/index.ts — imports @test/a/1 and @test/a/2
then run:
cd packages/b
pnpm esr index.ts
The code in shared.ts will execute twice.
Complete minimal reproduction: https://github.com/IlyaSemenov/esbuild-runner-monorepo-duplicate-import
Suggested workaround
I believe here:
|
externals = [ |
|
...Object.keys(pkg.dependencies ?? {}), |
|
...Object.keys(pkg.devDependencies ?? {}), |
|
] |
we can filter externals with something like:
.filter(e => !(pkg.dependencies?.[e] || pkg.devDependencies?.[e]).startsWith("workspace:"))
In a monorepo, importing from different files of a sibling workspace package leads to duplicate code in generated bundle.
Consider this monorepo:
packages/a/1.tsimports./sharedpackages/a/2.tsimports./sharedpackages/a/shared.ts— this import gets duplicated in esbuild-runner bundlepackages/b/index.ts— imports@test/a/1and@test/a/2then run:
The code in
shared.tswill execute twice.Complete minimal reproduction: https://github.com/IlyaSemenov/esbuild-runner-monorepo-duplicate-import
Suggested workaround
I believe here:
esbuild-runner/src/esbuild.ts
Lines 35 to 38 in 6e5d00b
we can filter
externalswith something like: