microsoft / vscode-loader

An universal Asynchronous Module Definition (AMD) Loader developed primarily to load VSCode's sources.
Other
169 stars 53 forks source link

Support dynamic import under NodeJS #36

Open Silic0nS0ldier opened 2 years ago

Silic0nS0ldier commented 2 years ago

In a non-ESM context normally import() can be used to bring in ESM code. Under this loader this will be true for browsers, but not NodeJS which does not include an implementation by default for scripts constructed with vm.Script.

Downstream this complicates extension development in VSCode as it means ESM packages can only be used if first transformed into a compatible syntax (usually by a bundler). Note that the extension development host appears to load extensions without using this loader, so such dynamic import restrictions will not be seen there.

At present, I can see 2 paths towards supporting dynamic import.

  1. Supply a callback via the importModuleDynamically option (this API and those which may be needed for the implementation are marked experimental, it may be worth waiting on https://github.com/nodejs/node/issues/37648)
  2. ~Forfeit the nodeInstrumenter option so the implementation can be simplified to just require (by far easiest and not blocked by experimental API, but will be a breaking change)~ EDIT 2023-03-13: On closer inspection, it appears I read the codepath wrong. This is not an option.

Downstream issue: https://github.com/microsoft/vscode/issues/130367

metawrap-dev commented 7 months ago

Hoping that this will be available soon so that we can start consuming ESM code in extensions?

v4lentin1879 commented 5 months ago

Any updates on this one? Is there any way to import ESM code in vscode extensions?

TomasHubelbauer commented 1 month ago

VS Code 1.94 now ships the ESM build in the stable channel: https://code.visualstudio.com/updates/v1_94#_esm-is-shipping-for-vs-code

I tested using ESM in extensiom code and that still appears to be unsupported, but hopefully VS Code now shipping ESM means this limitation will be lifted, soon.