【发布时间】:2012-03-02 10:53:35
【问题描述】:
为了让我的 CoffeeScript 代码在 Node.js 和 javascript 上运行,我应该小心避免什么?显而易见的答案是“不要使用 Node.js”函数,但我想知道是否还有其他小的“陷阱”会破坏两者之间的代码移植。
【问题讨论】:
标签: coffeescript
为了让我的 CoffeeScript 代码在 Node.js 和 javascript 上运行,我应该小心避免什么?显而易见的答案是“不要使用 Node.js”函数,但我想知道是否还有其他小的“陷阱”会破坏两者之间的代码移植。
【问题讨论】:
标签: coffeescript
假设您不依赖语言本身之外的任何 API(例如,您不使用除 setTimeout/clearTimeout 和 setInterval/clearInterval 以及附加到 Math 之外的任何函数) ,只有两件事需要担心:
for x in arr 和 if x in arr 语法帮助您避免这两个问题。
在浏览器中,全局对象为window;在 Node 中,全局对象是 global,但您通常希望导出一些东西。因此,正如Underscore.js 和其他人所展示的,通常的解决方案是在模块顶部写root = this,并将所有内容附加到root。在最外层范围内,this 在浏览器中指向 window,在 Node 中指向 exports。
我在这里假设您在单个脚本中定义您的模块。如果没有,你应该看看像 sstephenson 的 stitch 这样的工具,它可以让你编写一组可以在 Node 中相互require 的模块,然后将它们“拼接”在一起以供浏览器使用。
【讨论】:
root = this -- 尽管 Katz 先生的 reassuring tone in this article 很厉害,但如果你按照 Burnham 先生所说的那样做,你的生活总体上会简单得多。