coffeescript本地编译器和coffeescript到js站点输出不同的结果

时间:2012-10-13 08:43:47

标签: javascript coffeescript

如果我在本地机器上使用coffeescript编译器将此coffeescript编译为javascript:

window.App =
  Models: {}
  Views: {}
  Collections: {}
  Routers: {}
  init: ->
      Backbone.history.start()

我最终会得到这个生成的javascript输出:

// Generated by CoffeeScript 1.3.3
(function() {

  window.App = {
    Models: {},
    Views: {},
    Collections: {},
    Routers: {}
  };

  ({
    init: function() {
      var spotsList;
      spotsList = new App.Views.SpotsList();
      return Backbone.history.start();
    }
  });

}).call(this);

但是,如果我将在线coffeescript中的相同代码编译到js http://js2coffee.org/网站,我会得到这样的结果:

window.App = {
  Models: {},
  Views: {},
  Collections: {},
  Routers: {},
  init: function() {
    return Backbone.history.start();
  }
};

后者似乎更令人期待。我认为这可能会导致我的项目出现一些问题,但无法分辨。我知道当我调用App.init()时,我的javascript控制台说它不存在。谢谢你的帮助!

修复!

正如@Rob W在下面指出的那样,我的coffeescript代码中有一些标签。后来我发现这是因为我有一个干净的TextMate安装,并没有将它设置为“Soft Tabs(spaces)”。

1 个答案:

答案 0 :(得分:2)

您的“本地”和“在线”结果之间存在两个差异。

  1. 本地版本包含在一个闭包中。
  2. 本地版本的init方法悬挂在App之外。
  3. 额外的闭包是coffee编译器的默认行为。使用--bare标志不要删除包装器:

    coffee --bare --compile app.coffee
    

    没有理由发生2。确保空格匹配:如果在模型等之前有四个前面的空格,在init之前有三个空格,则输出将是“错误的”。