 <p>First things first, the CoffeeScript compiler already has a <code>join</code> command: </p> <blockquote> <pre><code>-j, --join [FILE] </code></pre> <p>Before compiling, concatenate all scripts together in the order they were passed, and write them into the specified file. Useful for building large projects.</p> </blockquote> <p>Secondly, instead of using <code>$(document).ready(function () { ...} )</code>, you can just pass the function directly to the <code>$()</code> - <code>$(function () { ... });</code></p> <p>For your actual problem, there are a few ways you could do it.</p> <h2>Option 1:</h2> <p>Compile the .coffee files using the <code>-b / --bare</code> option, and then manually concatenate a file containing <code>$(function() {</code> and the start and <code>});</code> at the end (but that's pretty gross).</p> <h2>Options 2:</h2> <p>Use something like <code>exports = window ? this</code> to get the global object, and assign the functionality you wish to run in the jQuery load function to that global object, eg:</p> <pre><code>FooModule = do -&gt; class Foo constructor: (@blah) -&gt; init = -&gt; blah = new Foo('bar') init: init exports = window ? this exports.Foo = FooModule </code></pre> <p>You could then have another file that contains something like the following:</p> <pre><code>$(-&gt; Foo.init() ) </code></pre> <p>Hope one of those options is good?</p>