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,418 thoughts on “Using RequireJS exports with CoffeeScript

  1. Howdy! Someone in my Myspace group shared this site with us so I came to look it over.
    I’m definitely loving the information. I’m bookmarking and will be tweeting this to my followers!
    Exceptional blog and excellent design.

  2. I was excited to find this website. I need to to thank you for your time due to this fantastic
    read!! I definitely really liked every bit of
    it and I have you book-marked to see new things on your
    web site.

  3. Sweet blog! I found it while searching on Yahoo News.
    Do you have any suggestions on how to get listed in Yahoo News?

    I’ve been trying for a while but I never seem to get there!

    Thank you

  4. hello there and thank you for your information – I have certainly picked up anything
    new from right here. I did however expertise a few technical
    points using this website, since I experienced to
    reload the site lots of times previous to I could get it
    to load properly. I had been wondering if your web hosting is OK?
    Not that I am complaining, but sluggish loading instances times will sometimes affect your placement in google and can damage
    your high-quality score if advertising and marketing with Adwords.
    Anyway I am adding this RSS to my e-mail and
    can look out for much more of your respective
    interesting content. Ensure that you update this
    again very soon.

  5. One of the most noticeable trading systems in the online trading landscape is MetaTrader 5, typically referred to
    as MT5. The change from the initial MetaTrader 4 to its successor, MT5,
    was noted by significant improvements in functionality, allowing for much more complicated order types,
    deeper market evaluation, and integrated tools for
    mathematical trading.

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>