deno.jsonc 而不是 package.json。在混合式專案裡,deno.jsonc 會與 package.json 並存,用來承載 Deno 原生的設定。無論是哪一種,extension dev 與 extension build 的行為都相同。
用 Deno 建立專案
主要模式:deno.jsonc 就是專案 manifest
當你在 Deno 執行環境下建立專案時,deno.jsonc 會成為專案唯一的 manifest,而 package.json 會被移除。
- 樣板的相依套件會以
npm:specifier 的形式進入imports,由deno install負責解析。 extension引擎本身也宣告在那裡,形式為npm:extension@<version>。nodeModulesDir會設為"auto",因此npm:相依套件會落在一個真實的node_modules資料夾裡。bundler 在 dev 與 build 時都從那裡解析專案相依套件。deno task <name>也會到node_modules/.bin尋找執行檔,所以產生出來的 task 執行的是本機安裝的 Extension.js CLI。
deno.json 勝過 deno.jsonc,所以合併的目標會是 Deno 實際會讀取的那個檔案。
伴隨模式:deno.jsonc 與 package.json 並存
monorepo 樣板,以及那些已經有package.json 的專案,都會保留它。相依套件仍然宣告在 package.json 中,由 deno install 從那裡解析。作為伴隨檔的 deno.jsonc 只承載 Deno 原生的設定,以及用來執行 CLI 的 tasks。
工具鏈如何偵測 Deno
偵測依據的是檔案,而不是你用什麼方式呼叫 CLI:- Extension.js 在掃描專案相依套件時會讀取
deno.jsonc或deno.json。框架、CSS 與 TypeScript 的偵測都看得到imports透過npm:specifier 宣告的套件。 - 當兩份 manifest 宣告了同一個套件時,以
package.json中的項目為準。 - 一個專案要算是由 Deno 管理,必須擁有
deno.lock,或是有一份 Deno 設定檔且旁邊沒有package.json。對混合式專案而言,npm 家族的 lockfile 優先;而且只有當deno執行檔位於你的 PATH 上時,才會認定為 Deno。
Deno 專案中的 TypeScript
TypeScript 的偵測規則與其他地方完全相同。參見 TypeScript:由 SWC 編譯原始碼,typescript 套件只有在做 tsc --noEmit 時才需要。
下一步
- 了解 Extension.js 如何處理 Node API。
- 進一步了解如何管理 extension 設定。

