dynamic import() polyfill + question
Benoit Marchant
marchant at mac.com
Fri Apr 21 16:24:50 UTC 2017
I really like that idea
> On Apr 21, 2017, at 08:22, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
>
> nobody has any thought on this ?
>
> Maybe the following pattern would be just about enough to solve a generic asynchronous import/export ?
>
> ```js
> export default new Promise(async $export => {
>
> const utils = await import('./utils.js').default;
>
> $export({module: 'asynchronous', utils});
>
> });
> ```
>
> Best Regards
>
>> On Thu, Apr 20, 2017 at 11:51 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
>> 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
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170421/a08c19c0/attachment.html>
More information about the es-discuss
mailing list