Cannot implement import attribute `with { type: "external" }`
I'm trying to implement this:
// Not externalized
import { something } from 'some-package'
// Externalized
import { something } from 'some-package' with { type: "external" }
In other words:
build.onResolve({filter: /.*/}, async (args) => {
if (args.kind !== 'import-statement') return undefined
if (args.with === 'external') {
return { external: true, /*...*/ }
}
// ...
})
That would work but the issue is that args.with is missing at onResolve(). It seems to be provided only to onLoad().
Is there a way to implement such import attribute?
This is not currently supported, but it's something to add to esbuild in the future. I think this issue is related to at least #3384 and #3639.
Keep in mind that
build.onResolve({filter: /.*/}, async (args) => {
is a pretty punishing operation. What you ask from esbuild here is call a javascript method on every single import statement, which blocks esbuild from grinding through your project as fast as possible, as it can only pick the next file when your resolver answered. Even if this took only a millisecond to answer, on 1000 import statements you added 1 second of overhead.
It might turn out to be a really handy option. As for possible performance issues I saw someone had suggested to introduce extra filtering property, smth. like { filter: /.*/, withType: "external" }.