I see -- interesting use case! Yes, you'd need to transform external module 
declarations into local module definitions. But it should be pretty 
straightforward: wherever you see

    module m = "foo.js";

you replace it with

    module m {
        // contents of foo.js (recursively transformed)
    }

(Incidentally, I've been working (off and on) on an API that exposes 
SpiderMonkey's internal parser to JavaScript code, so that a JS program can 
take a string, parse it as JS source, and get back a JS object representing the 
AST. This should be helpful for building these kinds of tools.

    https://developer.mozilla.org/en/SpiderMonkey/Parser_API

When I can find the time, I also want to write a JS pretty-printer that can 
take one of these AST's and output JS source again.)

Dave

On Dec 28, 2010, at 11:17 AM, Kevin Smith wrote:

> Ah - that's much more elegant.  Let me see if I can describe better though.
> 
> I want to keep my library in source form as separate modules (one module per 
> file, probably).  I'll do development and testing that way.  But I want to 
> distribute my library as a single file.  Presumably I'll need some tool to 
> "bundle" all of the component modules together.  I'm just trying to get a 
> mental picture of what such a tool would have to do.  It seems like we'd need 
> to rewrite the module declarations (i.e. module b = "b.js";) but to what?  Or 
> would we?
> 
> Kevin
> 
> 
> On Tue, Dec 28, 2010 at 1:51 PM, David Herman <[email protected]> wrote:
> I'm not quite sure I understand the scenario you're describing. Do you mean 
> that we dump the contents of a.js and b.js into all.js and delete the first 
> two files? In that case you can do:
> 
>     // all.js:
>     export module a {
>         export module b {
>             // original b.js contents ...
>         }
>         // original a.js contents ...
>     }
> 
> But I'm not sure if I'm getting what you want the example to be.
> 
> Dave
> 
> On Dec 28, 2010, at 10:41 AM, Kevin Smith wrote:
> 
>> Sweet - I was hoping that the module wouldn't have to name itself.
>> 
>> My next question has to do with bundling.  Let's say I want to bundle a.js 
>> and b.js into a single file, with the exports of a.js providing the exports 
>> of this bundled "thing".  I suppose I could wrap both of the individual 
>> modules something like this:
>> 
>> module a { /* a.js text */ }
>> module b { /* b.js text */ }
>> 
>> export a; // ? Not sure about this one
>> 
>> But will the runtime know how to correctly resolve the (module b = "b.js";) 
>> that comes from a.js?  Or will that declaration have to be rewritten?
>> 
>> 
>> 
>> On Tue, Dec 28, 2010 at 1:30 PM, David Herman <[email protected]> wrote:
>> There's some flexibility built in to the system via module loaders. The 
>> "filesystem modules" example is hypothetical; it assumes a built-in module 
>> loader that maps files available on the filesystem to corresponding 
>> pre-defined, nested modules.
>> 
>> On the web, you would do almost as you suggest:
>> 
>> > // a.js
>> > module a
>> > {
>> >     module b = "b.js";
>> > }
>> 
>> except that a.js doesn't name itself; it's named by the script that loads it:
>> 
>>    // a.js
>>    module b = "b.js";
>>    ...
>> 
>>    // b.js
>>    ...
>> 
>>    // project.html
>>    ...
>>    <script type="harmony">
>>    module a = "a.js";
>>    </script>
>> 
>> Dave
>> 
>> PS I will be updating the wiki pages soon to reflect some of the 
>> finer-grained details and tweaks I've made to the design based on my 
>> experience prototyping modules in Narcissus 
>> (http://github.com/mozilla/narcissus). I'll ping the list when the pages are 
>> updated.
>> 
>> 
>> _______________________________________________
>> es-discuss mailing list
>> [email protected]
>> https://mail.mozilla.org/listinfo/es-discuss
> 
> 
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to