Grails coffee文件中的函数在其他js中不可用

Grails coffee文件中的函数在其他js中不可用,grails,coffeescript,scope,coffeescript-resources,Grails,Coffeescript,Scope,Coffeescript Resources,我尝试在Grails项目中使用coffeescript。为了实现这一点,我决定使用coffeescript资源插件。但结果视图中的编译咖啡如下所示: (function() { var someFunc; someFunc = function() { return alert("hello"); }; }).call(this); 在这种情况下,我不能称之为。我在插件文档中没有找到任何适当的配置,以避免在编译coffee文件时使用匿名函数。如何解决此问

我尝试在Grails项目中使用coffeescript。为了实现这一点,我决定使用coffeescript资源插件。但结果视图中的编译咖啡如下所示:

(function() {
    var someFunc;
    someFunc = function() {
       return alert("hello");
    };
}).call(this); 
在这种情况下,我不能称之为。我在插件文档中没有找到任何适当的配置,以避免在编译coffee文件时使用匿名函数。如何解决此问题?

来自:

词汇范围和可变安全性
[…]
尽管为了清晰起见,在本文档中禁止使用,但所有CoffeeScript输出都包装在一个匿名函数中:
(function(){…})()
这个安全包装,再加上
var
关键字的自动生成,使得意外污染全局名称空间变得极其困难

如果要创建供其他脚本使用的顶级变量,请将它们作为属性附加到窗口或CommonJS中的导出对象上。存在运算符(如下所述)为您提供了一种可靠的方法来确定在何处添加它们;如果同时针对CommonJS和浏览器:
导出?此

因此,自调用函数包装器的存在是为了防止您污染全局名称空间。如果你想把一些东西放到全局名称空间中,那么你必须显式地把它放到那里;在浏览器中,可以使用以下方法执行此操作:

window.someFunc = -> alert('hello')

@someFunc
表单假定您位于范围的顶部(即不在另一个函数或类中)

或者,您可以找到一种方法来编译您的咖啡脚本:

-b,--bare

在不使用顶级函数安全包装器的情况下编译JavaScript


PS:如果有人能找到这个问题的标准答案,请告诉我,我会删除这个答案,并将这个问题标记为重复。今天早上我的搜索引擎似乎很弱。非常感谢!决定将函数附加到窗口,这通常比依赖于构建过程中使用的
--bare
更好。对于此功能(
--bare
),以及许多其他功能,有一个pull请求,但插件作者停止了对其的工作。因此,我建议您改用独立的命令行编译coffeescript。
@someFunc = -> alert('hello')