- From: James Browning <notifications@github.com>
- Date: Wed, 23 May 2018 15:05:24 -0700
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/645/391511383@github.com>
@justinfagnani I wrote a rant on the old top-level await is a [footgun gist](https://gist.github.com/Rich-Harris/0b6f317657f5167663b493c722647221#gistcomment-2246480). Basically the idea of it is that the lack of top-level `await` simply promotes the same patterns but in a considerably worse way. What'll simply happen is people will stop using all the features of ES modules properly and wind up re-creating AMD or something if they ever want to be able to use synchronous functions again e.g.: ```js import someModule from "./someFile.js" export default new Promise(resolve => { const { export1, export2 } = await someModule; const data = await fetch('data-file'); return { otherExport1, otherExport2, } } ``` So basically we manage to lose top-level names by not allowing top-level resource loading and gain precisely zero . Resource discovery should not be part of the ES module system period. Many file types may depend on loading arbitrary resources, there's already at least 3 things you can do to preload resources: use a service worker, use HTTP/2 push or just use a plain `<link rel="preload">`. Regarding the last one, there's no way to register interest in resources without manually hoisting them to the top-level HTML and tools can only detect things like `fetch`/`import()` in certain trivial cases. What would be good is if modules supported `<link rel="preload">` behaviour out of the box maybe as a pragma e.g.: ```js "preload resource1.txt as=fetch"; "preloadmodule child.js"; import foo from "foo.js"; const resource1 = await fetch('resource1.txt'); // ... ``` --- Frankly the lack of top-level await thus far has simply been a pain, I had a library (not a published one) where I wanted to export some synchronous functions but I needed to depend on a classic script. In order to do this I simply shamelessly used synchronous `XMLHttpRequest` because there's no good way to load a classic script as part of the dependency graph. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/webcomponents/issues/645#issuecomment-391511383
Received on Wednesday, 23 May 2018 22:05:48 UTC