Meteor定制包中的CoffeeScript命名空间导出

时间:2014-04-24 22:47:45

标签: coffeescript meteor

几个小时后,我无法获取Meteor软件包来导出CoffeeScript文件中定义的变量。

例如,在foo.coffee中,我尝试使用@Foo = {foo: 1}Foo = {foo: 1}exports.Foo = {foo: 1}等依此类推,但没有会工作。

最后,在查看了Meteor coffeescript test package on github之后,我在之前发出了api.export();来电对该软件包的<{1}}调用并且它正常工作< / strong>即可。

知道为什么吗?

我的包装设置如下:

目录

api.on_use()

foo.coffee

foo/
    .meteor/
    .build/
    foo.coffee
    package.js

package.js

class FooBar
  constructor: ->

Foo =
  FooBar: FooBar

2 个答案:

答案 0 :(得分:10)

Coffeescript编译

@Foo =
  FooBar: FooBar

(function() {
  this.Foo = { 
    FooBar: FooBar
  };  
}).call(this);

您需要在this.之前移除Foo,看看namespace,但这不是一个好主意,因为您可能需要在修改原始咖啡文件后进行编译

这是我的诀窍:

添加名为global_variables.js的文件:

Foo = this.Foo;

然后将其添加到package.js:

api.add_files('xxx', 'xxx', 'global_variables.js');

然后就行了!

答案 1 :(得分:1)

另一个平原&amp;简单的解决方案:

LIB / namespace.coffee

Users = {} # This is a local variable
@Users = Users # Globalize your variable

package.js

api.addFiles('lib/namespace.coffee');
api.export('Users');