Loader Hooks

Guy Bedford guybedford at gmail.com
Tue Jun 24 10:49:19 PDT 2014

We're also discussing ways of making these platform / environment
dependencies work nicely.

The hooks are asynchronous, so it is actually possible to import a module
from within a hook like the locate hook in this case.

Some combination of meta information and the above seems like it would work.

On 24 June 2014 08:18, Calvin Metcalf <calvin.metcalf at gmail.com> wrote:

> sorry I by shims I meant something like the es5-shim (
> https://github.com/es-shims/es5-shim) module as an example of something
> to import that only had side effects, as for exports examples a hook that
> looks for default exports of objects and added the objects properties as
> named exports might be an example (aka a loader hook to do what is being
> discussed right now on the other thread) or a hook to allow you to make a
> mutable default export
> You are 100% correct that this screws up static analysis so it might be
> better to think in terms of creating dynamic modules using the native
> parser function then in terms of mutating modules, i.e. more like my third
> suggestion then my second.
> On Tue, Jun 24, 2014 at 10:56 AM, caridy <caridy at gmail.com> wrote:
>> No no, neither of those are real use-cases for the hooks IMO. Native
>> modules are immutable, and you're not suppose to add new named exports
>> dynamically because you loose the ability to statically verify them. In the
>> case of the "path to file" (we call it `address`), you will have access to
>> it thru the module metas (API pending to be defined). In the case of shims,
>> you can do that by implementing a loader extension that uses a dynamic
>> module to shim the access to a native one, the way we do this today is by
>> hooking into the normalization process for dependencies, and replace the
>> dep with the shim dep, e.g.:
>> * "foo" imports "bar"
>> * "bar-shim" imports "bar"
>> * "bar-shim" wraps all exports of "bar"
>> * the loader extension wire "foo" to consume "bar-shim" instead of "bar".
>> The same principle applies for alias, buckets, etc.
>> /caridy
>> On Jun 24, 2014, at 10:36 AM, Calvin Metcalf <calvin.metcalf at gmail.com>
>> wrote:
>> Say you wanted to add a hook which automatically added an export named
>> filepath to a module is the path to the file, or add an import just for the
>> side effects (say a shim or something).  The relevant code in es6 module
>> loader is
>> https://github.com/ModuleLoader/es6-module-loader/blob/master/lib/loader.js#L181-L256
>> On Tue, Jun 24, 2014 at 10:33 AM, caridy <caridy at gmail.com> wrote:
>>> Calvin, I don't fully understand what you mean by "manipulate the
>>> exports and imports". I assume you're talking about native modules since
>>> you already have full control over the dynamic modules workflow. Maybe Guy
>>> Bedford can provide more details on how he implemented this process in
>>> es6-module-loader.
>>> /caridy
>>> On Jun 24, 2014, at 10:17 AM, Calvin Metcalf <calvin.metcalf at gmail.com>
>>> wrote:
>>> > I've been doing work with the loader hooks and one gap that stands out
>>> is that there is no hook to let you manipulate the exports and imports of
>>> an module without parsing it yourself, in other words if you want to add,
>>> remove, or modify exports or imports of a module you have to write your own
>>> parsing function because the default instantiate function returns undefined.
>>> >
>>> > Ideas:
>>> >
>>> > - There is a way of doing what I need to do that I am missing.
>>> > - Add a post instantiate hook between
>>> (InstantiateSucceeded) and (ProcessLoadDependencies)
>>> > - The steps in could be moved to the default instantiate
>>> function so that when overriding it you can still call it to get the parsed
>>> module object.
>>> >
>>> > ---
>>> > -Calvin W. Metcalf
>>> >
>>> > _______________________________________________
>>> > es-discuss mailing list
>>> > es-discuss at mozilla.org
>>> > https://mail.mozilla.org/listinfo/es-discuss
>> --
>> -Calvin W. Metcalf
> --
> -Calvin W. Metcalf
> _______________________________________________
> 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/20140624/9d32c6ef/attachment.html>

More information about the es-discuss mailing list