为了让我的CoffeeScript代码在Node.js和javascript上运行,我应该小心避免什么?显而易见的答案是“不使用Node.js”功能,但我想知道是否还有其他一些小的“陷阱”会破坏两者之间的代码移植。
答案 0 :(得分:5)
假设您不依赖语言本身之外的任何API(例如,您不使用setTimeout
/ clearTimeout
和setInterval
/ clearInterval
以外的任何功能和那些附在Math
)的人,只有两件事需要担心:
您可以依赖较新的JS功能,例如Array::forEach
和Array::indexOf
在Node中,但不在浏览器中。 CoffeeScript可以帮助您分别使用for x in arr
和if x in arr
语法来避免这两个问题。
在浏览器中,全局对象为window
;在Node中,全局对象为global
,但您通常希望导出内容。因此,正如Underscore.js和其他人所证明的那样,通常的解决方案是在模块顶部编写root = this
并将所有内容附加到root
。在最外层的范围内,this
指向浏览器中的window
和节点中的exports
。
我假设你在一个脚本中定义你的模块。如果没有,你应该看一下像sstephenson的stitch这样的工具,它允许你在Node中编写一组可以require
相互关联的模块,然后将它们“拼接”在一起用于浏览器。