dynamic import() polyfill + question

Andrea Giammarchi andrea.giammarchi at gmail.com
Thu Apr 20 10:51:44 UTC 2017


Even if unpolyfillable through simple `function import() {}` declaration,
I've managed to create a polyfill/payground for the ESnext's dynamic
import() [1]

This also made me wonder if there's any plan to provide a way to
asynchronously
export modules that depends on those that use asynchronous import.

Since AFAIK modules have no top-level await, the only pattern I can see
right now
to import something asynchronous is the following one:

```js
// module ./js/c.js
export default Promise.all([
  import('./js/a.js'),
  import('./js/a.js')
]).then([a, b] => {
  const module = {a, b, c() {}};
  return module;
});

// module that uses ./js/c.js
import('./js/c.js').then(m => m.default).then(c => {
  c.a(); c.b(); c.c();
});
```

However, above boilerplate doesn't seem ideal compared with something like
the following:

```js
// module ./js/c.js
export default await Promise.all([
  import('./js/a.js'),
  import('./js/a.js')
]).then([a, b] => {
  const module = {a, b, c() {}};
  return module;
});

// module that uses ./js/c.js
import * as c from './js/c.js';
```

But again, AFAIK that's not possible.

The clear advantage is that the module consumer wouldn't need to know, or
care,
if the loaded module depends on some dynamic, asynchronous, import,
meaning modules can be updated and eventually moved to async transparently
for any module consumer.

As summary, is any solution worth exploring/improving/fixing/planning?

Thank you.
Best Regards

[1] https://github.com/WebReflection/import.js#importjs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170420/840a70f2/attachment.html>


More information about the es-discuss mailing list