AL2023 中的 TypeScript - Amazon Linux 2023

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AL2023 中的 TypeScript

注意

本文件提供有關 TypeScript 及其 Node.js 型執行環境的基本資訊。它還涵蓋典型的開發工作流程,並說明 TypeScript 如何封裝在 AL2023 中,以提供一致且可重現的開發環境。

TypeScript (TS) 是一種以 JavaScript (JS) 為基礎的程式設計語言,可提供所有 JS 的功能,也可以使用類型系統進行擴展。在典型案例中,以 TS 撰寫的程式會先翻譯成 JS 程式碼,然後以 的任何其他一般 JS 程式執行Node.js。在 TS 的特定術語中,此轉譯程序稱為「編譯」,並由稱為 tsc 的「編譯器」執行tsc 編譯器本身是以 JS 撰寫,因此執行時也需要 JS 執行時間環境,例如 Node.js。與一些其他 JS 執行期環境不同, Node.js 目前只有實驗性和輕量型 TS 支援。完整的 TS 支援,包括類型檢查,仍然需要使用第三方套件,例如 typescript。取得Node.js執行時間環境 tsc (TS 編譯器) 的預期方法是安裝 typescript 節點模組。這可以使用其中一個套件管理員來完成,通常是 npm。有兩種方式可以使用 npm 安裝 TS 編譯器:全域和專案中。官方建議的方法是根據專案安裝 TS 編譯器,以確保專案的長期一致性和可重複性。不過,全域安裝 TS 編譯器可能仍然很有用,因為它為整個主機及其 JS 執行時間提供相同的版本,因此對於本機未安裝 TS 編譯器的專案。這是 Amazon Linux 上可用的 RPM 套件,例如 nodejs20-typescriptnodejs22-typescript、在系統層級全域安裝 TS 編譯器,以及針對每個支援的Node.js版本個別安裝的方式。

tsc 不直接依賴任何Node.js版本。編譯器預期執行時間功能有特定層級,透過目標lib 等選項在特殊檔案中定義 (tsconfig.json)。這些選項的值代表 ECMAScript (ES) 標準的版本,JS 執行期環境可能支援 (也可能不支援)。不同版本的 Node.js支援不同版本的 ES 標準。的 版本越新Node.js,支援的 ES 標準版本就越高且更完整。如果專案根目錄中不存在 tsconfig.json,則會使用預設的組態選項集。具有不同 版本的相容性資料表Node.js和各種 ES 標準版本的支援功能可在 node.green 取得。tsc 有超過 100 個不同的選項,可在 tsconfig.json 中定義。當在另一個檔案中定義一些組態選項,然後包含在主要檔案中時,也支援組態鏈結。此方法允許安裝與特定 版本相容的 Base TS ConfigNode.js,然後使用專案特定的選項進行擴展。幸運的是, 的基礎 TS Config Node.js可作為節點模組使用,可以使用 npm 安裝在專案資料夾中。以下是組態的 182022 Node.js版原始碼。

Node.js 基於 的執行時間設計有一定的弱點:它在主機上僅支援一個版本的執行時間,並且需要專案層級所有相依性的重現性和一致性。這導致以下常見的 TypeScript 使用方法:TS 編譯器、目前Node.js版本的 TS 基礎組態,以及所有軟體相依性都安裝在專案內的本機。雖然全域安裝的節點模組預期只是 CLI 工具,例如 npmtsc,這也是 CLI 工具,但很少全域安裝。值得注意的是,tsc 的全域 (全系統) 和本機 (專案內) 安裝可以共存,沒有問題,也可以是獨立使用的不同版本。請注意,本機安裝的 tsc 應使用與 npm 一起安裝的 npx 工具執行。因此,即使使用系統 TS 編譯器,使用者仍有機會選擇執行時間元件的版本,例如 Node.js(透過透過替代方案切換作用中版本)、TS 編譯器 (透過在本機安裝,或透過替代方案切換作用中版本),以及針對特定需求進行設定。

Amazon Linux 在每個Node.js版本基本上封裝 TS 編譯器的方式與其他全域安裝的節點模組相同,例如 npm。套件和二進位檔是命名空間,並包含 的主要版本Node.js做為其名稱的一部分。編譯器的預設可執行檔名稱 tsc 會在執行時間由替代工具管理,並指向目前作用中版本的 Node.js,其已停用且將由 執行。此選擇不會因目前的Node.js執行時間版本而減少。您可以讓節點可執行檔指向 Node.js 20,並將 tsc 設定為由 22 Node.js 解譯。您也可以獨立使用 TS 編譯器的命名空間名稱,例如 tsc-{MAJOR_VERSION},以設定預設 tsc 名稱。

管理 TS 編譯器作用中版本的一些實用命令
  1. 檢查針對 設定哪些替代方案

    alternatives --list
  2. 檢查 tsc 目前的組態

    alternatives --display tsc
  3. 以互動方式變更tsc版本

    alternatives --config tsc
  4. 切換到手動模式並選取特定版本

    alternatives --set tsc /usr/bin/tsc-{MAJOR_VERSION}
  5. 切換回自動版本選擇模式

    alternatives --auto tsc

在同一系統上安裝和使用多個版本的 Node 和 TS 編譯器的範例:

# Check the AL2023 release $ cat /etc/amazon-linux-release Amazon Linux release 2023.9.20250929 (Amazon Linux) # Install a TypeScript compiler for Node.js 20 and 22 # Node.js 20 and 22 will be installed automatically $ sudo dnf install -qy nodejs20-typescript nodejs22-typescript # Check what was installed $ rpm -q nodejs20 nodejs20-typescript nodejs22 nodejs22-typescript nodejs20-20.19.5-1.amzn2023.0.1.x86_64 nodejs20-typescript-5.9.2-1.amzn2023.0.1.noarch nodejs22-22.19.0-1.amzn2023.0.1.x86_64 nodejs22-typescript-5.9.2-1.amzn2023.0.1.noarch # Check the active version of Node.js - it is version 20 $ alternatives --display node node - status is auto. link currently points to /usr/bin/node-20 /usr/bin/node-20 - priority 100 slave npmrc: /usr/lib/nodejs20/lib/node_modules/npm/npmrc slave npm: /usr/bin/npm-20 slave npx: /usr/bin/npx-20 slave node_modules: /usr/lib/nodejs20/lib/node_modules /usr/bin/node-22 - priority 100 slave npmrc: /usr/lib/nodejs22/lib/node_modules/npm/npmrc slave npm: /usr/bin/npm-22 slave npx: /usr/bin/npx-22 slave node_modules: /usr/lib/nodejs22/lib/node_modules Current 'best' version is /usr/bin/node-20. # Check the active JS runtime version for TypeScript # Currently, the tsc compiler will be executed by Node.js 22 $ alternatives --display tsc tsc - status is auto. link currently points to /usr/bin/tsc-22 /usr/bin/tsc-22 - priority 100 slave tsserver: /usr/bin/tsserver-22 /usr/bin/tsc-20 - priority 100 slave tsserver: /usr/bin/tsserver-20 Current 'best' version is /usr/bin/tsc-22. # Check versions printed by executables $ node -v v20.19.5 $ tsc -v Version 5.9.2 # while the node is 20, tsc is executed by node 22 anyway $ head -1 /usr/bin/tsc #!/usr/bin/node-22 # However, instead of default executable names, e.g. node or tsc, # we can use namespaced names to target any installed version $ node-20 -v v20.19.5 $ node-22 -v v22.19.0 $ tsc-20 -v Version 5.9.2 $ tsc-22 -v Version 5.9.2 $ head -1 /usr/bin/tsc-20 #!/usr/bin/node-20 $ head -1 /usr/bin/tsc-22 #!/usr/bin/node-22