如何在coffeescript中为Google Apps脚本生成全局的,命名的javascript函数

mat*_*tbh 9 javascript function google-apps-script coffeescript

我想使用CoffeeScript 为Google Apps脚本编写Javascript脚本,而且我无法以预期的形式生成函数.

Google Apps脚本希望脚本包含顶级命名函数.(我可能使用了错误的术语,所以我将用例子说明我的意思......)

例如,Google Apps脚本可以很好地识别此功能:

function triggerableFunction() {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

...虽然这个函数不是(它会解析,但你不会触发它):

var nonTriggerableFunction;

nonTriggerableFunction = function() {
  // ...
};
Run Code Online (Sandbox Code Playgroud)

我发现使用CoffeeScript,我能得到的最接近的是nonTriggerableFunction上面的表格.生成triggerableFunction如上所述的命名函数的最佳方法是什么?

我已经在使用'bare'选项(-b开关),在没有顶级功能安全包装的情况下进行编译.

我在网上找到的一个结合了CoffeeScript和Google App Script的项目是Gmail GTD Bot,它似乎是使用反向标记的组合,并要求用户从结果代码中手动删除一些行.(请参阅脚本末尾和README的"安装"部分).我希望有一个更简单,更清洁的解决方案.

And*_*nko 13

CoffeeScript不允许您隐式地在全局命名空间中创建任何内容; 但是,您可以通过直接指定全局命名空间来完成此操作.

window.someFunc = (someParam) -> 
    alert(someParam)
Run Code Online (Sandbox Code Playgroud)


mat*_*tbh 3

事实证明,这可以通过为每个函数使用一行嵌入式 Javascript来完成。

例如这个 CoffeeScript:

myNonTriggerableFunction = ->
  Logger.log("Hello World!")

`function myTriggerableFunction() { myNonTriggerableFunction(); }`
Run Code Online (Sandbox Code Playgroud)

...当使用“bare”选项(-b 开关)调用咖啡编译器时,将生成此 JavaScript:

var myNonTriggerableFunction;

myNonTriggerableFunction = function() {
  return Logger.log("Hello World!");
};

function myTriggerableFunction() { myNonTriggerableFunction(); };
Run Code Online (Sandbox Code Playgroud)

通过上面的例子,Google Apps Script 可以myTriggerableFunction直接触发。