Using RequireJS exports with CoffeeScript

If you are using the “exports” object in your RequireJS module definition and happen to also be using CoffeeScript then be careful to either return the exports object at the end of the function or explicitly return nothing from the function by typing “return” on the last line. Like so:

define((require, exports, module) ->
    exports.foo = 'bar'
    return
)

If you don’t return nothing or the exports object CoffeeScript will compile this:

define((require, exports, module) ->
    exports.foo = 'bar'
)

…to the following javascript:

define(function(require, exports, module) {
    return exports.foo = 'bar';
});

Where the return value will be the string ‘bar’. This is no good because if you return a value from your module definition function, RequireJs uses it instead of the exports object. So when you come to require your module, you’ll be passed a String, rather than an object with a “foo” property as you’d expect.

7,103 thoughts on “Using RequireJS exports with CoffeeScript

  1. What’s up i am kavin, its my first occasion to commenting anyplace, when i read this paragraph i
    thought i could also make comment due to this good paragraph.

  2. When I originally left a comment I seem to have clicked the -Notify me when new comments are
    added- checkbox and now each time a comment is added I
    get four emails with the same comment. There has to be a way
    you can remove me from that service? Thanks!

  3. Just desire to say your article is as surprising. The clearness for your submit is simply great and i can suppose you are an expert in this subject.
    Well with your permission allow me to clutch your RSS feed to stay up to date with approaching post.
    Thank you 1,000,000 and please continue the gratifying work.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>