Modules and dependencies known before the load
johnjbarton at google.com
Wed Aug 13 15:30:16 PDT 2014
Your example will just work if you just use
When this module is compiled the other two will be loaded and compiled.
On Wed, Aug 13, 2014 at 2:59 PM, Ian Hickson <ian at hixie.ch> wrote:
> One of the problems I'm running into when it comes to trying to integrate
> ES6 modules with HTML and new HTML-based dependency features is the way
> that I can't tell ES about dependencies I know about before the data is
> actually fetched and instantiated. The problem can essentially be
> summarised by this line from the definition of ProcessLoadDependencies():
> # The ProcessLoadDependencies abstract operation is called after one
> # module has nearly finished loading. It starts new loads as needed to
> # load the module's dependencies.
> Suppose a page has this markup:
> <script type=module id=jquery href="jquery.js" whenneeded></script>
> <script type=module id=a href="a.js" uses="jquery" whenneeded></script>
> <script type=module>
> import "a";
> // ...
> ...where "uses" is some hypothetical markup for telling the browser about
> dependencies ahead of time (the assumption being that anims.js contains
> a line like 'import "jquery";'), and where "whenneeded" is some attribute
> that tells the browser to not bother starting the whole loading process
> until the resource is needed.
> In this example, the first two <script>s do nothing at first. Then the
> third one is parsed, PromiseOfStartLoadPartwayThrough() is called with the
> contents of the element as the source, and eventually the ES system learns
> that it wants module "a".
> Here, the "normalize" and "locate" hooks work together to determien that
> the element with id=a is what we're looking for. (Maybe it should be
> import "#a", to distinguish a package name from an ID, but that's a topic
> for another e-mail.)
> At this point, I want to tell the ES6 module that:
> (a) we need to set off a load for that second <script> element, and
> (b) once we have that <script> element's file, it's probably going to
> want to import "jquery", and therefore, we should also set off a
> load for that first <script> element with id=jquery.
> Right now, I don't see any way to do (b). ProcessLoadDependencies() is
> called after "instantiate" is done (by InstantiateSucceeded()), and it is
> the first time the ES6 module system tries to load anything.
> Ideally I think we should adjust the ES6 module system to support loading
> and compiling code (though not necessarily executing it) for dependencies
> at or around the "fetch" hook.
> Failing that, I guess we can also just do that at the HTML level. Will
> that just work? I'm not able to follow the ES spec closely enough to
> determine if, when ProcessLoadDependencies() is called for "a" and finds
> it needs "jquery", it will properly link to the as-yet-not-loaded-but-
> already-in-progress-load for "jquery".
> Ian Hickson U+1047E )\._.,--....,'``. fL
> http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
> Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
> es-discuss mailing list
> es-discuss at mozilla.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss