有没有办法将CoffeeScript发送到客户端的浏览器并将其编译为JavaScript *那里*?

时间:2011-03-02 16:32:28

标签: javascript coffeescript

有没有办法将CoffeeScript发送到客户端的浏览器并将其编译为JavaScript 那里

<script type="text/coffeescript">
    square = (x) -> x * x
    list = [1, 2, 3, 4, 5]        
    squares = (square num for num in list)
</script>

CoffeeScript编译器是用JavaScript编写的,所以我可以将其发送到客户端以在客户端的浏览器中编译/运行此代码吗?

3 个答案:

答案 0 :(得分:48)

Jeremy已经有了这个,但让我补充一些重要的细节和警告:

  1. 在39k gzipped(与29k的jQuery相比),coffee-script.js是一个大文件;所以除非你实际上让你的用户运行他们自己的CoffeeScript,否则你真的不应该在生产中使用它。
  2. 如文档中所述,每个CoffeeScript代码段都将在其自己的匿名闭包中。因此,您的示例代码段不会执行任何操作 - squares在脚本之外不可见。相反,您需要将其更改为window.squares = ...
  3. 所有CoffeeScript代码,无论是外部代码还是内联代码,都将在页面上的所有JavaScript代码之后运行。那是因为coffee-script.js在文档准备好之后才读取<script type="text/coffeescript>标记,此时您的JavaScripts已经运行。
  4. 远程CoffeeScripts通过XMLHTTPRequest加载,这意味着它们必须与您的网站托管在同一个域中。 (某些浏览器 - Chrome,至少在XMLHTTPRequest路径上执行file://时也存在问题。)
  5. 目前,无法保证运行不同远程CoffeeScripts的顺序。我为此提交了一个补丁,但它还没有正式成为CoffeeScript的一部分。见this pull request
  6. 因此,您可能希望查看将CoffeeScript作为编译JavaScript提供的一些替代方法。如果您正在为Ruby或Python服务器开发,可以使用插件。我试图在http://github.com/jashkenas/coffee-script/wiki/Web-framework-plugins列出所有内容。

    如果你正在开发一个没有后端的网站,我强烈推荐的工具是Middleman,这可以让你在开发过程中使用CoffeeScript(以及Haml和Sass,如果你想的话),然后编译并缩小它以进行生产部署。

答案 1 :(得分:8)

答案是肯定的。我不会重复@ Trevor的优秀答案,而只是提供一个你正在思考的例子:

http://forgivingworm.wordpress.com/2010/09/27/running-coffeescript-in-browser/

基本上你

  1. 使用 text / coffeescript
  2. 标记您的coffeescript
  3. 在页面上的所有coffeescript之后加入coffee-script.js( 编译器将按顺序评估和编译所有coffeescript)
  4. 以下示例HTML

    <html>
      <head>
        <title>In-Browser test</title>
        <script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&#8221;> </script>
        <script type=”text/coffeescript”>
          $ -> $(‘#header‘).css ‘background-color‘, ‘green‘
        </script>
        <script type=”text/javascript” src=”http://github.com/jashkenas/coffee-script/raw/master/extras/coffee-script.js&#8221;> </script>
      </head>
      <body>
        <h1 id=”header” style=”color:white”>CoffeeScript is alive!</h1>
      </body>
    </html>
    

答案 2 :(得分:2)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <title>CoffeScript on browser</title>
  </head>
  <body>
    <script type="text/coffeescript">
      alert 'It works!'
    </script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/coffee-script/1.7.1/coffee-script.min.js"></script>
  </body>
</html>
  • 必须在要运行的脚本之后加载CoffeeScript。
  • 如果使用src,您必须能够通过XMLHTTPRequest访问该文件,特别是在file://的浏览器上失败。