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



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

假设您不依赖语言本身以外的任何 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和 Node 中的exports

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

最新更新