Coffeescript编译到Node.js与浏览器js的差异

Coffeescript编译到Node.js与浏览器js的差异,coffeescript,Coffeescript,为了让我的CoffeeScript代码同时在Node.js和javascript上运行,我应该小心避免什么?显而易见的答案是“不要使用Node.js”函数,但我想知道是否还有其他小的“陷阱”会破坏在这两个函数之间的代码移植。假设您不依赖语言本身以外的任何API(例如,除了设置超时/清除超时和设置间隔/清除间隔以及那些附加到数学的函数之外,您不使用任何函数),只需要担心两件事: 您可以依赖较新的JS功能,如Array::forEach和Array::indexOf在节点中,但不在浏览器中。Coff

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

假设您不依赖语言本身以外的任何API(例如,除了
设置超时
/
清除超时
设置间隔
/
清除间隔
以及那些附加到
数学
的函数之外,您不使用任何函数),只需要担心两件事:

  • 您可以依赖较新的JS功能,如
    Array::forEach
    Array::indexOf
    在节点中,但不在浏览器中。CoffeeScript分别使用arr中x的
    和arr
    中x的
    语法帮助您避免这两个问题

  • 在浏览器中,全局对象是
    window
    ;在节点中,全局对象是
    global
    ,但您通常希望导出内容。因此,如和其他人所示,通常的解决方案是在模块顶部写入
    root=this
    ,并将所有内容附加到最外层的
    root
    在浏览器中指向
    窗口
    ,在节点中指向
    导出


  • 我在这里假设您是在一个脚本中定义模块。如果不是,您应该看看像sstephenson这样的工具,它允许您编写一组模块,这些模块可以
    在节点中相互要求
    ,然后“缝合”它们一起用于浏览器。

    +1 for
    root=this
    ——尽管卡茨先生很强大,但如果你照伯纳姆先生说的做,你的生活总体上会简单得多。