ReferenceError:未定义共享

时间:2015-01-15 09:28:05

标签: meteor coffeescript webstorm

我有一个Meteor项目,我使用coffeescript。

我不确定发生了什么,但突然我的解决方案出现了这个错误。

    ReferenceError: share is not defined
at app/models/Models.js:3:3

当我尝试启动我的解决方案时。

只要我使用Meteor coffeescript共享变量,就会生成此错误。

我正在使用WebStorm并且我有一个FileWatcher将coffeescript转换为javascript。当我打开它(我需要能够在WebStorm中调试)时,它会为我的.coffee文件生成.js和.map文件。

所以不知何故,这些生成的JS文件没有引用coffeescript在Meteor中用于拥有全局变量的共享变量。

我试图删除.idea目录和.meteor目录,我尝试添加和删除meteor coffeescript包。我甚至试图创建一个新的解决方案 - 我仍然遇到同样的问题。

我似乎无法修复它,以便在打开文件观察程序时没有错误。

此错误的来源是什么,我该怎么做才能解决?

1 个答案:

答案 0 :(得分:1)

Meteor在将coffeescript编译为js时做了一项特殊的工作:它以

为前缀生成代码
__coffeescriptShare = typeof __coffeescriptShare === 'object' ?
    __coffeescriptShare : {};
var share = __coffeescriptShare;

确保全局__coffeescriptShare存在并分配给文件范围变量共享。

但文件观察程序中使用的标准CoffeeScript编译器对这些流星技巧一无所知。结果,我们得到

(function() {
  share.TestFunction = function(p) {
    return p;
  };

}).call(this);

而不是

function(){__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
share.TestFunction = function(p) {
  return p;
};

})();

因此标准编译器不适合转换coffeescript流星应用程序。必须使用Meteor coffeescript包。它支持源映射,因此没有理由使用文件观察器。对我来说,在使用Meteor coffeescript包生成的地图时,调试工作正常,但并非总是如此。请注意,WebStyorm还不支持meteor + coffeescript。相关门票为:WEB-14479WEB-14794

相关问题