在CoffeeScript中跨AMD模块引用非全局变量

在CoffeeScript中跨AMD模块引用非全局变量,coffeescript,requirejs,Coffeescript,Requirejs,我正在用CoffeeScript编写一个应用程序,其中主对象声明如下: App = Models: {} Views: {} Collections: {} start: -> console.log('started') null require ['models/question', 'views/question'], -> new App().start() null 此代码编译为javascript,如下所示: (function

我正在用CoffeeScript编写一个应用程序,其中主对象声明如下:

App =
  Models: {}
  Views: {}
  Collections: {}
  start: ->
    console.log('started')
    null

require ['models/question', 'views/question'], ->
  new App().start()
  null
此代码编译为javascript,如下所示:

(function() {
  var App;
  App = {
    Models: {},
    Views: {},
    Collections: {},
    start: function() {
      console.log('started');
      return null;
    }
  };

  require(['models/question', 'views/question'], function() {
    new App().start();
    return null;
  });

}).call(this);
#Coffeescript
    App.Model.Question = Backbone.Model.extend(
      defaults : ->
        question: "How're you"
    )


//Javascript

(function() {
  App.Model.Question = Backbone.Model.extend({
    defaults: function() {
      return {
        question: "How're you"
      };
    }
  });

}).call(this);
在该程序的模型代码“required”中,Coffeescript及其编译如下所示:

(function() {
  var App;
  App = {
    Models: {},
    Views: {},
    Collections: {},
    start: function() {
      console.log('started');
      return null;
    }
  };

  require(['models/question', 'views/question'], function() {
    new App().start();
    return null;
  });

}).call(this);
#Coffeescript
    App.Model.Question = Backbone.Model.extend(
      defaults : ->
        question: "How're you"
    )


//Javascript

(function() {
  App.Model.Question = Backbone.Model.extend({
    defaults: function() {
      return {
        question: "How're you"
      };
    }
  });

}).call(this);
由于coffeescript的编译方式,编译后的代码中没有全局变量。因此,当问题模型页面加载时,它会抛出一个错误:在浏览器控制台中:

未捕获引用错误:未定义应用程序


我不知道如何解决这个问题,因为在我的项目中,我会有很多跨模块的参考资料。如何确保使用coffeescript时跨模块的可见性。

通过将
-b
--bare
标志传递给编译器,“在没有顶级函数安全包装的情况下编译JavaScript”

只需将其放在那里,即可将其设置为全局或“名称空间”

window.MyNamespace = {}
window.MyNamespace.App = App

谢谢你知道安全包装纸的用途吗?