|
JavaScript Development Toolkit(JSDT)是一種開放源碼外掛程式,它將健壯的 JavaScript 編程工具引入到 Eclipse 平台中。JSDT 使開發更加流暢、簡化了編碼並提高了純 JavaScript 源檔案和 HTML 內建的 JavaScript 的生產力。 JavaScript 開發並不容易。瀏覽器安全色性參差不齊、文檔非常糟糕、工具貧乏,這些因素使問題進一步惡化。幸運的是,隨著最近針對 Eclipse 的外掛程式集 JavaScript Development Toolkit(JSDT)的發布,工具匱乏的局面有望得到改善。 Eclipse 是一個開源的 IDE 架構,具有提高擴充性和靈活性的架構。JSDT 作為外掛程式在 Eclipse 中運行。在 Eclipse 中,JavaScript 並不是什麼新鮮的概念,因為已經可以從其他外掛程式獲得 HTML 和一些 JavaScript 支援,但是 JSDT 的獨特之處在於其所提供的工具的健壯性和複雜性,這可顯著提高 Web 開發的生產力。 JSDT 提供的許多特性和核心設計都可以在 Java Development Toolkit(JDT)中找到。JSDT 將要代替 Web Tools Platform V3.0 發行版中當前的 JavaScript 編輯器。 IDE 和 JavaScript 您可能想知道為什麼 JavaScript IDE 會如此流行。隨著 Web 2.0 的流行以及大量開發人員都熱衷於在部落格和社區頁面中使用 JavaScript,大量新的 JavaScript 工具不斷出現。儘管如此,Notepad 和瀏覽器的 Refresh 按鈕仍然是大多數程式員首選的 JavaScript 開發環境。 問題在於 JavaScript 語言的解釋性。與 Java 或 C 語言不同,JavaScript 是一種松類型的語言,並且很難實現精確建模。對於較為正式的語言,需要優先考慮已編譯代碼的效率,並且對語言的靈活性有所限制。JavaScript 的目標則不一樣。各種因素試圖分化趨向同一個平台的開發人員,這導致了語言的不一致性。從工具和開發的角度來看,這些不一致性使問題更加複雜。 瀏覽器並不是惟一的問題。物件導向的 JavaScript 是一種補充而不是關注的焦點。Ajax 工具箱努力使 JavaScript 朝物件導向方面轉變 — 但是各自採取不同的方式。這可能會使標識對象和類結構變得很困難。這種語言有幾個嚴重的漏洞,程式員利用它們實現一些使用其他方式難以實現的技巧,這使問題更加嚴重(或者更好,取決於您詢問的對象)。其中一個例子是將主要的代碼塊封裝到一個 evalf(..) 函數中,使它只在運行時有效。我們目前仍然在克服這個問題,以便在 JSDT 中精確建模。 現有的 JavaScript IDE 目前可以使用一些並不完整的 JavaScript 工具。但是很多流行的工具還不能提供真正的上下文感知內容協助,因為它們缺少真正的 JavaScript 語言建模機制。在模型較少的 IDE 中,通過使用靜態一般檔案列出可用的類型,可以實現內容完成和工具功能。這些類型根據輸入的部分字元動態調整,並且通常不會選擇代碼中定義的對象成員。內容完成對上下文不敏感,因為如果沒有模型的話,可實現的功能將受到很大限制。 如果沒有語言模型,則很難或者不可能將代碼放入到上下文中。由於很多編程元素都依賴於代碼的上下文,因此使用工具建立上下文十分重要。缺少模型和代碼內容相關的 IDE 同樣也會缺少充分的類型解析和驗證、範圍、可視性,或者其他任何對簡化開發非常重要的良好驗證功能。
JSDT 設計 圖 1. JSDT 語言抽象棧
JSDT 對 JavaScript 語言建模並即時隱含類結構,這通過一種全新的方式來實現。首先,構建基本的語言元素。其次,推理引擎或引擎協助填補所有類結構和語言差異。 基礎語言模型 可以將推理和建模流程看作一個操作棧。模型的開始部分是 JavaScript 原始碼。通過使用類似 Eclipse JDT 的引擎,將原始碼轉換為私人的語言模型。語言的純模型遵守 ECMA-3 標準。 類型和類推理 對 JavaScript 語言建模後,下一步是管理類型和類推理。許多基於 JavaScript 的工具箱(例如 Dojo、Rico、Prototype)通過自己的技術使 JavaScript 物件導向編程更加方便。JSDT 使用定製的、工具箱感知的推理引擎在工具箱內部識別類和類型結構。這些類和類型隨後可以添加到語言模型中。 公開模型 最後,將私人模型及其推理部分轉換為公用語言模型。公用語言模型可用於原始碼、重構和 as-you-type 工具。如果其中一種工具需要修改一些 JavaScript 原始碼,就得先在公用模型中進行修改,並最終轉換到 JavaScript 原始碼。 管理變數和成員範圍 即使語言模型為描述 JavaScript 原始碼和上下文提供了基礎,還需要另外一個重要因素:環境內容。JSDT 必須在運行 JavaScript 的全域範圍時建立可用的變數和類型。這些變數和類型根據 JavaScript 的運行時環境而有所不同。當 JavaScript 在 網頁瀏覽器上下文中運行時,對象、類型、表示螢幕資料的欄位以及瀏覽器對象在全域範圍中都是可用的。如果代碼是針對其他內容而不是瀏覽器,那麼整個對象集可能會不同。 圖 2. JSDT 庫配置
JSDT 使用庫機制管理項目中的通用對象、變數和類型。可以將庫添加到項目中,以提供特定於使用者目標運行時環境的對象和變數集。如果存在兩個定義衝突成員的庫,則在相應的使用者介面中彙總並注釋這些成員。這有助於建立在瀏覽器或環境之間通用的方法。 為流行的瀏覽器預打包庫非常簡單。庫被捆綁在一個外掛程式中,該外掛程式包含有定義對象和類型的 JavaScript 源檔案。當 JSDT 對原始碼編輯器中開啟的檔案進行建模時,它首先對檔案的原始碼建模,然後將項目的庫集合中的所有源檔案添加到模型。庫源檔案永遠不會進行驗證,只用於定義對象結構、附加在懸浮式協助和內容完成中可見的 JsDoc。 雖然庫的主要功能是管理 JavaScript 的運行時上下文,但是它還提供了另一個重要特性 — 處理源檔案交叉引用。純 JavaScript 不具備顯式的 include 函數。開發人員的一個不良習慣就是將函數散布到多個源檔案中。庫配置頁面可以協助管理源檔案之間的交叉項目可見度。如果某個專案檔夾被標記為一個源檔案,那麼該檔案夾中的所有 JavaScript 將包括在全域範圍中。使用 exclude 模式可以限制檔案夾。
工具 撇開較高層的設計不談,我們仔細看看這些特性。JSDT 的一些可視性較弱但非常重要的特性包括:相同文字反白、自動閉合大括弧(以及圓括弧、引號)以及自動縮排等。因此可以說,“只要是良好 IDE 應該具備的,JSDT 都提供支援”。 圖內容協助 |