我有一个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包。我甚至试图创建一个新的解决方案 - 我仍然遇到同样的问题。
我似乎无法修复它,以便在打开文件观察程序时没有错误。
此错误的来源是什么,我该怎么做才能解决?
答案 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-14479,WEB-14794