2

我想创建一个简单的演示页面,在浏览器中使用extras/coffee-script.js编译 CoffeeScript 。但是,当我添加此源并在我的 text/coffeescript 标记中编写我的 CoffeeScript 时,它会在一个闭包中编译,因此我无法访问浏览器控制台中的 CoffeeScript 函数。

为了做到这一点,我需要做

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

这对我的演示来说并不理想。我想添加 bare = true 选项,以便我可以访问浏览器控制台中的功能。我在extras/coffee-script.js 的什么地方添加了这个选项?

这是编译好的js:

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

我有这个example.coffee:

learning = ->
  "I am learning coffeescript"

使用以下命令从命令行运行编译器:

coffee -c --bare example.coffee

编译成这个example.js:

// Generated by CoffeeScript 1.6.2
var learning;                                                                   

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

这将从控制台全局可用。

4

2 回答 2

3

下面的代码打印到控制台:我正在学习coffeescript

注意:window.learning在全局范围的控制台中可用。

<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>
于 2013-10-28T23:35:00.660 回答
2

无论在哪里调用该CoffeeScript.compile函数,都可以传入--bare选项,就像命令行一样:

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

如果你查看缩小的源代码,最后你会看到:

CoffeeScript.run(a.innerHTML,s)

元素在哪里(源也是),a选项在哪里,然后通过 run 传递到:<script>a.innerHTMLscompile

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

如您所见,t.bare设置为!0(aka true),因此bare已设置!

于 2013-05-23T04:14:10.430 回答