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

Joe*_*ett 3 coffeescript meteor

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

foo.coffee,例如,我尝试使用@Foo = {foo: 1},Foo = {foo: 1},exports.Foo = {foo: 1},等等等等,但没有什么会工作.

最后,看着流星后CoffeeScript的测试包在github上,我把api.export();通话之前api.on_use()呼吁,即包和它的工作.

知道为什么吗?

我的包装设置如下:

目录

foo/
    .meteor/
    .build/
    foo.coffee
    package.js
Run Code Online (Sandbox Code Playgroud)

foo.coffee

class FooBar
  constructor: ->

Foo =
  FooBar: FooBar
Run Code Online (Sandbox Code Playgroud)

package.js

Package.describe({
    summary: "A package that makes foo with foobar"
});

Package.on_use(function(api) {
    api.use("coffeescript", "client");
    api.export("Foo", "client"); // <-- Moved this to *before* the on_use declaration

    api.add_files("foo.coffee", "client");

});
Run Code Online (Sandbox Code Playgroud)

wai*_*kuo 10

Coffeescript编译

@Foo =
  FooBar: FooBar
Run Code Online (Sandbox Code Playgroud)

(function() {
  this.Foo = { 
    FooBar: FooBar
  };  
}).call(this);
Run Code Online (Sandbox Code Playgroud)

你需要删除this.之前的Foo,看看命名空间,但这不是一个好主意,因为你可能需要在修改原始咖啡文件后编译它.

这是我的诀窍:

添加一个名为的文件global_variables.js:

Foo = this.Foo;
Run Code Online (Sandbox Code Playgroud)

然后将其添加到package.js中:

api.add_files('xxx', 'xxx', 'global_variables.js');
Run Code Online (Sandbox Code Playgroud)

然后就行了!