如何在 CoffeeScript 中为 Google Apps 脚本生成全局命名 JavaScript 函数
我想使用 CoffeeScript 为 Google Apps 脚本 编写 Javascript 脚本,并且我正在使用无法生成预期形式的函数。
Google Apps 脚本期望脚本包含顶级命名函数。 (我可能使用了错误的术语,所以我将用示例来说明我的意思...)
例如,这个函数很高兴被 Google Apps 脚本识别:
function triggerableFunction() {
// ...
}
...而这个函数不是(它会解析,但是你不会无法触发它吗?):
var nonTriggerableFunction;
nonTriggerableFunction = function() {
// ...
};
我发现使用 CoffeeScript,我能得到的最接近的是上面的 nonTriggerableFunction
形式。生成像上面的 triggerableFunction
这样的命名函数的最佳方法是什么?
我已经使用“裸”选项(-b
开关)来编译 没有顶级函数安全包装器。
我在网上发现的一个结合了 CoffeeScript 和 Google App Script 的项目是 Gmail GTD Bot,它似乎使用反引号的组合来完成此操作,并要求用户从结果代码中手动删除一些行。 (请参阅脚本的末尾,以及README 的“安装”部分)。我希望有一个更简单、更干净的解决方案。
I'd like to write Javascript scripts for Google Apps Script using CoffeeScript, and I'm having trouble generating functions in the expected form.
Google Apps Script expects a script to contain top-level, named functions. (I may be using the wrong terminology, so I'll illustrate what I mean with examples...)
For example, this function is happily recognised by Google Apps Script:
function triggerableFunction() {
// ...
}
... while this function is not (it will parse, but won't you won't be able to trigger it):
var nonTriggerableFunction;
nonTriggerableFunction = function() {
// ...
};
I've found that with CoffeeScript, the closest I'm able to get is the nonTriggerableFunction
form above. What's the best approach to generating a named function like triggerableFunction
above?
I'm already using the 'bare' option (the -b
switch), to compile
without the top-level function safety wrapper.
The one project I've found on the web which combines CoffeeScript and Google App Script is Gmail GTD Bot, which appears to do this using a combination of back-ticks, and by asking the user to manually remove some lines from the resulting code. (See the end of the script, and the 'Installation' section of the README). I'm hoping for a simpler and cleaner solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
CoffeeScript 不允许您在全局命名空间中隐式创建任何内容;但是,您可以通过直接指定全局命名空间来做到这一点。
CoffeeScript does not allow you to create anything in the global namespace implicitly; but, you can do this by directly specifying the global namespace.
事实证明,这可以通过为每个函数使用一行 嵌入式 Javascript 来完成。
例如
,当使用“bare”选项(-b 开关)调用咖啡编译器时,此 CoffeeScript: ... 将生成此 JavaScript:
通过上面的示例,Google Apps 脚本能够触发
myTriggerableFunction
直接地。Turns out this can be done using a single line of embedded Javascript for each function.
E.g. this CoffeeScript:
... will produce this JavaScript, when invoking the coffee compiler with the 'bare' option (the -b switch):
With the example above, Google Apps Script is able to trigger
myTriggerableFunction
directly.这应该给你一个全局命名函数(是的,这有点hacky,但远不如使用反引号):
This should give you a global named function (yes, it's a little hacky, but far less that using backticks):
只需在脚本中使用@,我的代码示例:
它将被编译为:
this = window 在这种情况下,所以它是全局函数
juste use @ in script, exemple of my code :
it will be compiled in :
this = window in this case, so it's global function