Hi Sebastien,

JSPM and SystemJS, IMHO, are not as elegant as the way Maven (Java) or
Bundler (Ruby) can manage dependencies.

Apologies if the following explanation is redundant and you already know
how Maven works, but just for the sake of wider audience I will briefly
explain it here.

In Maven, each library is resolved by its coordinates: group id, artifact
id, and version. For example, the Google Guava library is made of the
following coordinates:

Group ID: com.google.guava
<http://mvnrepository.com/artifact/com.google.guava>
Artifact ID: guava
<http://mvnrepository.com/artifact/com.google.guava/guava>
Version: 18.0
<http://mvnrepository.com/artifact/com.google.guava/guava/18.0>

The short form notation is com.google.guava:guava:18.0.

Guava itself might depend on other dependencies, but you don't have to
explicitly require them in your project. As long as you specify you
require com.google.guava:guava:18.0,
all its dependencies are added to your project automatically.

Most open source libraries are available in the Maven Central repository
which is enabled by default. Users can additionally specify other
repositories that Maven should query in order to find libraries with
specific coordinates.

In SystemJS, baseURL looks similar to the notion of a Maven repository, but
it is not as elegant: you can't have multiple baseURLs (if I am not wrong),
and dependencies are specified relative to the baseURL, not as absolute
coordinates and not versioned.

I am looking for something similar to SystemJS that can be used like this:

System.config({
    repositories: [
      'cdn.w3c.org',
      'cdn.google.com',
      'cdn.example.com'
    ]
});

System.import('com.modernizr:modernizr:2.8.3');
System.import('com.jquery:jquery-ui:1.11.4');
System.import('com.lodash:lodash:3.10.0');

The call to System.import('com.modernizr:modernizr:2.8.3') will first query
cdn.w3c.org for com.modernizr:modernizr:2.8.3. If found, it will use that,
if not it queries cdn.google.com and then cdn.example.com until it finds it
or fails.

Similarly the call to System.import('com.jquery:jquery-ui:1.11.4') will do
the same thing, but as jquery-ui depends on jquery, it will also download
that.

One benefit of this compared to what is already out there is that at the
moment if Site A uses CDN 1 for loading jQuery v1 and Site B uses CDN 2 for
the same version of jQuery, the browser has to download both versions. But
with this approach, as long as both sites depend on com.jquery:jquery-ui:1.11.4
it only has to be downloaded once.


On Thu, Jul 30, 2015 at 7:14 PM Sébastien Cevey <seb.ce...@guardian.co.uk>
wrote:

> Hi Behrang,
>
> Have you had a look at JSPM and SystemJS? They cover similar grounds in
> userspace, with the intent for SystemJS to be the upcoming standard Module
> Loader.
>
> https://github.com/jspm/jspm-cli
> https://github.com/systemjs/systemjs
>
> On Thu, 30 Jul 2015 at 09:59 Behrang Saeedzadeh <behran...@gmail.com>
> wrote:
>
>> Hi,
>>
>> Has this been discussed before? In a nutshell this diagram illustrates
>> the idea:
>>
>> http://i.imgur.com/X1n57iQ.png
>>
>>    - Rather than referencing a url in <script> or <style> tags, we
>>    require the browser to load name-spaced, versioned libraries. For example:
>>    com.jquery:jquery:1.0.
>>    - This can either be done using the <script>/<style> tags similar to
>>    <script module="com.jquery:jquery:1.0"/> or <style
>>    module="com.jquery:jquery:1.0" /> or probably programmatically too: (in a
>>    JS file: require "com.jquery:jquery:1.0")
>>    - There will be a central placed governed by W3C, for example, that
>>    can host libraries. Third-party repositories could also exist and be used
>>    (e.g. <script module="com.jquery:jquery:1.0" repository="
>>    cdn.jquery.com"/>
>>    - One benefit of this is dependency management. If jquery, for
>>    example, depends on lodash, it also gets downloaded and loaded
>>    automatically.
>>
>> This is just the core of the idea. Nothing new (already similar systems
>> are available for Java, Node, .NET, Ruby, etc.) but this will bring it to
>> the web.
>>
>> What do you think?
>> --
>> Best regards,
>> Behrang Saeedzadeh
>>
> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
> ------------------------------
> Visit theguardian.com. On your mobile and tablet, download the Guardian
> iPhone and Android apps theguardian.com/guardianapp and our tablet
> editions theguardian.com/editions.  Save up to 57% by subscribing to the
> Guardian and Observer - choose the papers you want and get full digital
> access.  Visit subscribe.theguardian.com
>
> This e-mail and all attachments are confidential and may also be
> privileged. If you are not the named recipient, please notify the sender
> and delete the e-mail and all attachments immediately. Do not disclose the
> contents to another person. You may not use the information for any
> purpose, or store, or copy, it in any way.  Guardian News & Media Limited
> is not liable for any computer viruses or other material transmitted with
> or as part of this e-mail. You should employ virus checking software.
>
> Guardian News & Media Limited is a member of Guardian Media Group plc. 
> Registered
> Office: PO Box 68164, Kings Place, 90 York Way, London, N1P 2AP.  Registered
> in England Number 908396
>
>
> --
Best regards,
Behrang Saeedzadeh
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to