> This type of boilerplate may not be processed properly by AMD
> optimizers that insert module IDs into the define call when multiple
> modules are combined together. While the above may work with the
> requirejs optimizer, it is not guaranteed to work in the future. I
> still prefer the define() call is a non-property function call and not
> a call to an object method, to avoid possible conflicts with a module
> export value (uglifyjs has one such conflict).

I’d expect to remove my boilerplate either via an extra build step or via 
generic boilerplate support in the RequireJS optimizer (“remove all lines where 
'//amd-boilerplate' appears”).

I’ve chosen my format after considering two alternatives (which both had 
disadvantages).

Alternative 1:
    if (typeof define !== 'function') { var define = 
(require('amdefine'))(module); }
    define(...);

The above code relies on a quirk of of `var`. If you wrap it in an IIFE then it 
will stop working (because the inner var define will always shadow an outer 
value).

Alternative 2:
    (function (define) {
        define(...);
    }(typeof define === 'function' ? define : require('amdefine'))(module));

Here the boilerplate appears both before and after the AMD code. That’s more 
intrusive and harder to copy/paste.

> In that message I also mention encouraging the use of the "amdefine"
> adapter module in Node. Use of this module will help test drive a
> define() implementation that could be integrated into Node later, and
> by having Node packages use the module, it would give Node committers
> a way to scan the package.json info to find out if define() use is
> used enough to warrant consideration in their core.


I’m still examining all available, but eventually a campaign might be in order. 

-- 
Dr. Axel Rauschmayer
[email protected]

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com



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

Reply via email to