Coffeescript编译为Node.js vs浏览器JS差异

时间:2012-03-01 23:40:06

标签: coffeescript

为了让我的CoffeeScript代码在Node.js和javascript上运行,我应该小心避免什么?显而易见的答案是“不使用Node.js”功能,但我想知道是否还有其他一些小的“陷阱”会破坏两者之间的代码移植。

1 个答案:

答案 0 :(得分:5)

假设您不依赖语言本身之外的任何API(例如,您不使用setTimeout / clearTimeoutsetInterval / clearInterval以外的任何功能和那些附在Math)的人,只有两件事需要担心:

  1. 您可以依赖较新的JS功能,例如Array::forEachArray::indexOf在Node中,但不在浏览器中。 CoffeeScript可以帮助您分别使用for x in arrif x in arr语法来避免这两个问题。

  2. 在浏览器中,全局对象为window;在Node中,全局对象为global,但您通常希望导出内容。因此,正如Underscore.js和其他人所证明的那样,通常的解决方案是在模块顶部编写root = this并将所有内容附加到root。在最外层的范围内,this指向浏览器中的window和节点中的exports

  3. 我假设你在一个脚本中定义你的模块。如果没有,你应该看一下像sstephenson的stitch这样的工具,它允许你在Node中编写一组可以require相互关联的模块,然后将它们“拼接”在一起用于浏览器。