簡體   English   中英

如何確保瀏覽器和node.js的JavaScript庫兼容

[英]How do you ensure compatibility JavaScript libraries for the browser and for node.js

我正在與一個名為Classical.jsTypeScript librabry團隊合作,我們非常希望該庫的核心模塊與JavaScript環境無關。 在我看來,這意味着它不僅應該可以跨瀏覽器正常運行,而且還應該作為node.js項目中的依賴項。

首先,我是否應該在測試矩陣中缺少任何應注意的主要JavaScript環境?

不幸的是,團隊中沒有人與節點一起發展。 因此,我們不太確定要避免使用哪些API( 顯然是DOM )來確保兼容性。 使用僅在瀏覽器中測試過的代碼時,節點開發人員會遇到一組標准的GOTCHA嗎?

我們(希望)解釋了全局范圍的名稱的一個差異,如果內存能夠正確地為我服務,則該范圍由在瀏覽器的節點和窗口中名為global的對象表示。 這些是我們正在尋找的GOTCHA。

我認為您在這里遇到了一個重要問題,該問題目前尚未曝光:您想創建一個同構庫,並且想知道您所依賴的庫是同構的。 我認為,例如在npm中將同構模塊清楚地標記為同形模塊將是一件好事。

這里有一個有關此主題的不錯的博客: http : //nerds.airbnb.com/isomorphic-javascript-future-web-apps/

基本上,同構庫應該僅使用JavaScript語言本身(ES3,ES5,ES6等)構建的功能。

  • 您應該避免與DOM相關的任何內容(窗口,文檔,導航器等),因為這僅在瀏覽器環境中可用。
  • node.js的許多核心模塊無法在瀏覽器中使用(例如文件系統,操作系統,進程,網絡,流等)。 對於許多核心模塊,有可用的瀏覽器安全版本(例如,加密貨幣和http)。 捆綁供瀏覽器使用的node.js應用程序時,Browserify使用這些版本。
  • 有大量的JavaScript引擎可以用C,Java,Python等各種語言實現,也可以直接在Espruino等硬件上運行。 這些引擎可能不是100%符合語言規范。 例如,有一天,我遇到Java中的JS引擎(我認為是Rhino)不喜歡名稱為boolean的變量。 在這種情況下,我認為這些引擎應該具有更好的兼容性,而不是您必須解決它們的錯誤/限制。

無論如何,有一種簡單的方法可以測試您的庫是否同構:嘗試在node.js和5個最大的瀏覽器中運行它:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM