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

时间:2014-10-22 16:12:55

标签: javascript node.js typescript compatibility

我正在与TypeScript librabry called Classical.js上的团队合作,我们非常希望此库的核心模块与JavaScript环境无关。在我看来,这意味着它不仅应该跨浏览器正常运行,而且还应该作为node.js项目中的依赖项。

首先,我是否遗漏了我应该注意的测试矩阵中的任何主要JavaScript环境?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

基本上,同构库应该只使用JavaScript本身构建的功能(ES3,ES5,ES6,...)。

  • 您应该避免与DOM(窗口,文档,导航器等)相关的任何内容,因为这只能在浏览器环境中使用。
  • node.js的许多核心模块不能在浏览器中使用(如文件系统,操作系统,进程,网络,流等)。对于许多核心模块,可以使用浏览器安全版本(例如,用于加密和http)。 Browserify在捆绑node.js应用程序时使用这些版本,以便在浏览器中使用。
  • 野外有很多JavaScript引擎,可以用C,Java,Python等各种语言实现。也可以直接在Espruino等硬件上运行。这些引擎可能不是100%符合语言规范。例如,有一天我遇到Java中的JS引擎(我认为它是Rhino)并不喜欢名称为boolean的变量。在这些情况下,我认为这些引擎应该得到更好的合规性,而不是你必须解决他们的错误/限制。

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