如何确保浏览器和node.js的兼容性JavaScript库?

我正在和一个名为Classical.js的TypeScript库的工作团队合作,我们非常希望这个库的核心模块是JavaScript环境不可知的。 在我看来,这意味着它不仅要正确地跨浏览器工作,还要作为node.js项目的依赖项。

首先,我是否错过了我应该注意的testingmatrix中的所有主要JavaScript环境?

不幸的是,团队中没有人开发节点。 因此,我们不太确定要避免哪些API( 显然是DOM )来确保兼容性。 节点开发人员在使用仅在浏览器中testing过的代码时是否有一组标准的GOTCHA?

我们所做的一个差异(希望)是全局范围的名称,如果内存正确地为我提供服务,则由浏览器中节点和窗口中名为global的对象表示。 这是我们正在寻找的那种GOTCHA。

我认为你在这里有一个重要的问题,那就是目前曝光不足:你想创build一个同构库,并且你想知道你依赖的库是同构的。 我认为这将是一件好事,当同构模块将被清楚地标记为例如npm。

这里有一个很好的博客: http : //nerds.airbnb.com/isomorphic-javascript-future-web-apps/

基本上,同构库应该只使用JavaScript语言本身的function(ES3,ES5,ES6,…)。

  • 您应该避免与DOM(窗口,文档,导航器等)相关的任何内容,因为这仅在浏览器环境中可用。
  • 许多核心模块node.js不能在浏览器中使用(如文件系统,操作系统,进程,networking,stream等)。 对于许多核心模块,可以使用浏览器安全版本(例如,encryption和http)。 Browserify在绑定node.js应用程序以在浏览器中使用时使用这些版本。
  • 有很多JavaScript引擎,用C,Java,Python等所有types的语言来实现,也可以直接在像Espruino这样的硬件上运行。 这些引擎可能不是100%符合语言规范。 例如,我曾经遇到有一天,Java中的JS引擎(我认为它是Rhino)不喜欢variables具有名称boolean 。 在这些情况下,我会争辩说,这些引擎应该得到更好的顺从性,而不是你必须解决他们的错误/限制。

无论如何,有一个简单的方法来testing你的库是否是同构的:尝试在node.js和5个最大的浏览器中运行它:)

    Interesting Posts