williamsbdev
williamsbdev

Reputation: 538

Compile CoffeeScript in the browser with extras/coffee-script.js

I would like to create a simple demo page that compiles CoffeeScript in the browser with the extras/coffee-script.js. However, when I add this source and write my CoffeeScript within my text/coffeescript tags it is compiled in a closure so I don't have access to the CoffeeScript functions in the browser console.

In order to do so, I would need to do

<script type="text/coffeescript">
  window.learning = ->
    "I am learning coffeescript"
</script>
<script type="text/javascript" src="js/vendors/coffee-script.js"></script>

This is not ideal for my presentation. I would like to add the bare = true option so that I have access to the functions in browser console. Where in the extras/coffee-script.js do I add this option?

Here is the compiled js:

(function() {
  window.learning = function() {
    return "I am learning coffeescript";
  };
})

I have this example.coffee:

learning = ->
  "I am learning coffeescript"

Running the compiler from the command line with the following:

coffee -c --bare example.coffee

It is compiled to this example.js:

// Generated by CoffeeScript 1.6.2
var learning;                                                                   

learning = function() {
  return "I am learning coffeescript";
};

This will be globally available from the console.

Upvotes: 2

Views: 3542

Answers (2)

jurassix
jurassix

Reputation: 1509

The below code prints out to the console: I am learning coffeescript

Note: window.learning is available in the console on the global scope.

<html>
<body>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/coffee-script/1.1.2/coffee-script.min.js"></script>
<script type="text/coffeescript">
window.learning = ->
  "I am learning coffeescript"
</script>
<script type="text/javascript">
setTimeout(function(){ console.log(window.learning()); }, 1000);
</script>
</body>
</html>

Upvotes: 3

phenomnomnominal
phenomnomnominal

Reputation: 5515

Where ever you call the CoffeeScript.compile function, you can pass in the --bare option, much like the command line:

CoffeeScript.compile(source, { bare: true });

If you look in the minified source, at the end you will see this:

CoffeeScript.run(a.innerHTML,s)

Where a is the <script> element, (so a.innerHTML is the source) and s is the options, which is then passed through run into compile:

CoffeeScript.run = function (e,t){return null==t&&(t={}),t.bare=!0,Function(compile(e,t))()}

As you can see, t.bare is set to !0 (aka true), so bare is already set!

Upvotes: 2

Related Questions