領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多Scripted 是 VMWare 出品的 JavaScript 編輯器,已於上個月在本部落格宣布。在本文中,我們將深入探討 Scripted 的依賴性分析引擎。但在深入細節之前,讓我們先說明為何需要它。
[圖說 id="attachment_12178" align="aligncenter" width="533" caption="跨檔案內容輔助"][/圖說]
兩個組件協同運作以達成此目標
如果您只想將所有程式碼放入一個大型檔案中,那麼單獨使用高品質的推論器就足以提供相當不錯的內容輔助。但在現實中,專案會被劃分為模組。在上面的範例中,'main' 模組匯入了 'utils' 模組。當您編輯 main 模組時,Scripted 會適當地建議來自 'utils' 的函式。依賴性分析引擎使這一切成為可能。
[圖說 id="attachment_12180" align="aligncenter" width="518" caption="未解決模組的錯誤標記"][/圖說]
Scripted 也使用依賴性分析來支援輕鬆導航。在已解決的依賴性名稱上按 Shift 或 Ctrl + 滑鼠左鍵將會帶您前往對應的檔案。
在未來,依賴性分析也可能讓我們能夠實作重構工具。例如,如果您將 .js 檔案拖放到不同的目錄,Scripted 可以根據需要自動更新相對路徑參考。
getDGraph :: <path-to-js-file> -> <dependency-graph>此函式會計算依賴關係圖的 JSON 表示形式。此圖包含目標檔案直接或間接依賴的所有檔案的節點。如果我們將 'main' 模組傳遞給它,它將傳回如下內容
getDGraph('/sample/main.js') ==> { ... "/NODE-NATIVES/stream.js": { "kind": "commonjs", "refs": { ... } }, "/NODE-NATIVES/fs.js": { "kind": "commonjs", "refs": { "stream": { "kind": "commonjs", "name": "stream", "path": "/NODE-NATIVES/stream.js" }, ... } }, "/sample/utils.js": { "kind": "commonjs", "refs": {} }, "/sample/main.js": { "kind": "commonjs", "refs": { "fs": { "kind": "commonjs", "name": "fs", "path": "/NODE-NATIVES/fs.js" }, "./utils": { "kind": "commonjs", "name": "./utils", "path": "/sample/utils.js" } } } }此 JSON 物件中的每個屬性都代表圖中的一個節點。'refs' 屬性包含邊。每個邊都對應於一個模組匯入。
一個有趣的細節是,依賴性分析器會為原生 Node 模組傳回特殊的 路徑 字串。當推論引擎請求此路徑的原始碼時,以 JavaScript 編寫並在 Node.js 上執行的 Scripted 伺服器會從其自身的 Node.js 程序中提取原始碼。推論引擎會像分析普通的 JavaScript 檔案一樣分析它。結果是為內建 Node 模組提供良好的內容輔助。
[圖說 id="attachment_12184" align="aligncenter" width="587" caption="內建 Node 模組的推論建議"][/圖說]
步驟 2 和 3 會根據步驟 1 的模組類型分派到不同的支援模組。新增對其他模組類型的支援應該相對容易(前提是步驟 1 的偵測器可以識別新的模組類型)。
對於 Node/CommonJS,這運作良好,主要是因為實際上沒有太多需要配置的內容。也就是說,如果我們假設使用標準的 Node.js 載入器演算法,那麼這就是我們真正需要的所有資訊。
對於 AMD,情況不幸地更加複雜。典型的 AMD 載入器(例如 requirejs)是高度可配置的。此外,此配置在專案原始碼中的表達方式往往因專案而異。這使得在隨機專案中確定在哪裡找到所需資訊成為一項挑戰。
我們採用的方法是查看一些範例專案以及它們使用的「典型」模式。探索透過識別這些模式來運作。我們希望如果我們支援足夠常見的模式,最終探索將適用於大多數專案。對於那些失敗的情況,我們也可能會新增一些手動配置選項作為最後的手段。
為了讓您了解 AMD 探索是如何運作的,以下是我們目前偵測到的一種模式範例
此處的模式是帶有 data-main 屬性的 script 標籤… 如果 Scripted 找到此標籤,它將在 data-main 檔案中尋找 requirejs 樣式的配置區塊。
AMD 配置探索是一項正在進行中的工作。當我們收到更多關於人們如何設定其 AMD 載入器的範例時,我們會嘗試為其新增偵測器。如果 Scripted 錯誤地將許多依賴性標記為錯誤,則可能是它未能探索到您的 AMD 配置。您可以透過提出錯誤請求來幫助我們。如果您附加一個程式碼範例來說明您的「典型模式」。這將有助於我們擴展我們的「模式目錄」。
想試用 Scripted 嗎?從 GitHub 取得。它很容易安裝。下載和安裝說明位於 readme 檔案中。