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