【问题标题】:How do you ensure compatibility JavaScript libraries for the browser and for node.js如何确保浏览器和 node.js 的兼容性 JavaScript 库
【发布时间】:2014-10-22 16:12:55
【问题描述】:

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

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

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

我们所做的一个差异(希望)解释了全局范围的名称,如果我没记错的话,它由节点和 windowglobal 的对象表示/em> 在浏览器中。这些就是我们正在寻找的 GOTCHA。

【问题讨论】:

  • 如果你先为 node 开发,然后想移植到浏览器,你可以看看browserify
  • 我所知道的大多数服务器+客户端开发人员实际上都在反其道而行之——他们几乎完全是为节点开发的,然后使用他们在客户端需要的节点 API 填充浏览器.也就是说,这对于一个问题来说有点宽泛 - 最好在 chat 中解决一些问题并在此处处理更具体的问题。
  • 我对否决票感到沮丧。我非常感谢一位经验丰富的节点开发人员解释两种 JavaScript 环境之间差异的大小。投反对票使这种可能性大大降低
  • @Brad 我认为 Doug 的问题不是关于 如何 创建这样的库,而是创建同构库时要考虑什么。如果你的 node.js 库严重依赖fs,那么它就无法在你熟悉的浏览器中工作。依赖 DOM 的浏览器库也一样:在 node.js 中不可用。
  • @DougR 我根本没有批评你......只是提供建议和我自己的工作流程的一个例子。如果您对我的赞扬的解读被视为批评,我深表歉意。我也没有对你投反对票。 (实际上,我对你投了赞成票,而你对不发表评论的评论投了反对票。)

标签: javascript node.js typescript compatibility


【解决方案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 大浏览器中运行它:)

【讨论】:

  • 感谢您的周到回答
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多