gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:27 48 4
gpt4 key购买 nike

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

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

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

我们所做的一个差异(希望)解释了全局作用域的名称,如果我没记错的话,全局作用域由 Node 和窗口中名为global的对象表示 在浏览器中。这些正是我们正在寻找的陷阱。

最佳答案

我认为你在这里有一个重要的问题,一个目前尚未曝光的问题:你想要创建一个同构库,并且你想知道你依赖的哪些库是同构的。我认为当同构模块在 npm 等中被明确标记时,这将是一件好事。

这里有一个关于这个主题的不错的博客:http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/

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

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

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

关于javascript - 如何确保浏览器和 Node.js 的 JavaScript 库的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512107/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com