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.

18,304 thoughts on “Using RequireJS exports with CoffeeScript

  1. If some one desires expert view regarding running a blog after that i suggest him/her to visit this web site,
    Keep up the nice work.

  2. naturally like your website however you need to check the spelling on several of your posts.

    Several of them are rife with spelling issues and I
    in finding it very troublesome to tell the reality however
    I will definitely come back again.

  3. Simply wish to say your article is as astounding. The clarity
    in your post is simply spectacular and i could assume
    you’re an expert on this subject. Fine with your permission let me to grab your RSS feed to keep up to date with forthcoming post.
    Thanks a million and please keep up 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>