AL2023 での TypeScript - Amazon Linux 2023

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AL2023 での TypeScript

注記

このドキュメントでは、TypeScript とその Node.js ベースの実行環境に関する重要な情報を提供します。また、一般的な開発ワークフローを紹介し、一貫性と再現性のある開発環境を提供するために TypeScript が AL2023 にどのようにパッケージ化されているかを説明します。

TypeScript (TS) は、JavaScript (JS) に基づくプログラミング言語であり、JS のすべての機能を提供するとともに、タイプシステムで拡張されています。一般的なシナリオでは、TS で記述されたプログラムは最初に JS コードに変換され、次に Node.js によって他の通常の JS プログラムと同様に実行されます。TS の専門用語では、この変換プロセスを「コンパイル」、これを実行するのが「コンパイラ」 (tsc) と呼ばれています。tsc コンパイラ自体は JS で記述されているため、実行するには Node.js などの JS ランタイム環境も必要です。他の JS ランタイム環境とは異なり、Node.js は現在、実験的で軽量な TS のみをサポートしています。タイプチェックを含む完全な TS サポートでは、typescript などのサードパーティ製パッケージを使用する必要があります。Node.js ランタイム環境の tsc (TS コンパイラ) を取得するには、typescript ノードモジュールをインストールするのが一般的です。これを行うには、パッケージマネージャーの 1 つ (通常は npm) を使用できます。npm を使用して TS コンパイラをインストールするには、グローバルとプロジェクト内の 2 つの方法があります。正式に推奨されているインストール方法は、プロジェクトごとに TS コンパイラをインストールすることであり、プロジェクトの長期的な一貫性と再現性が確保されます。ただし、TS コンパイラをグローバルにインストールすることは、ホスト全体とその JS ランタイムに同じバージョンを提供するため、TS コンパイラがローカルにインストールされていないプロジェクトにも役立つ場合があります。これは、Amazon Linux で利用可能な RPM パッケージ (nodejs20-typescriptnodejs22-typescript など) では、まさにこの方法により、TS コンパイラをシステムレベルでグローバルに、かつサポートされている Node.js バージョンごとに個別にインストールします。

tsc はどの Node.js バージョンにも直接依存しません。コンパイラは、targetlib などのオプションを介して、特別なファイル (tsconfig.json) に定義されている特定レベルのランタイム機能を必要とします。これらのオプションの値は、ECMAScript (ES) 標準のバージョンを表し、JS ランタイム環境でサポートされる場合とそうでない場合があります。Node.js のバージョンごとにサポートされる ES 標準のバージョンは異なります。Node.js のバージョンが新しいほど、サポートされる ES 標準バージョンはより高く、より完全になります。tsconfig.json がプロジェクトのルートディレクトリに存在しない場合は、デフォルトの設定オプションセットが使用されます。Node.js のさまざまなバージョンと、さまざまな ES 標準バージョンでサポートされている機能との互換性の表は、node.green で参照できます。tsc には 100 を超えるさまざまなオプションがあり、tsconfig.json に定義されている場合があります。設定の連鎖もサポートされており、別のファイルで定義した設定オプションをメインファイルに含めることができます。このアプローチにより、特定バージョンの Node.js と互換性のある Base TS Config をインストールし、これをプロジェクト固有のオプションで拡張できます。幸い、Node.js の Base TS Configs は、ノードモジュールとして提供されており、npm を使用してプロジェクトフォルダにインストールできます。Node.js バージョン 182022 で config のソースコードを参照してください。

Node.js ベースのランタイム設計には特定の弱点があります。ホストでサポーされるランタイムのバージョンは 1 つだけで、プロジェクトレベルですべての依存関係の再現性と一貫性が求められることです。これにより、TypeScript を使用する一般的なアプローチとして、TS コンパイラ、Node.js 現行バージョンの TS 基本設定、およびすべてのソフトウェアの依存関係をプロジェクト内にローカルにインストールしています。グローバルにインストールされるノードモジュールは npm などの CLI ツールのみであることが予想されますが、同じく CLI ツールである tsc がグローバルにインストールされることはほとんどありません。幸い、tsc のグローバル (システム全体) インストールとローカル (プロジェクト内) インストールは問題なく共存でき、異なるバージョンとして個別に使用することもできます。ローカルにインストールした tsc は、npx ツールを使用して実行する必要があることに注意してください。このツールは npm と一緒にインストールされます。したがって、システム TS コンパイラを使用する場合でも、ユーザーはランタイムのコンポーネントのバージョンを選択できます。例えば、Node.js (アクティブバージョンを代替手段で切り替える)、TS コンパイラ (ローカルまたはグローバルにインストールし、アクティブバージョンを代替手段で切り替える) を選択し、特定のニーズに合わせて設定できます。

Amazon Linux は、npm などのグローバルにインストールされた他のノードモジュールと同じ方法で、TS コンパイラを Node.js バージョンごとにパッケージ化します。パッケージとバイナリは名前空間化され、名前の一部として Node.js のメジャーバージョンが含まれます。コンパイラのデフォルトの実行可能ファイル名 tsc は、alternatives ツールによってランタイムに管理され、ファイルがインストールされて実行される Node.js の現在アクティブなバージョンを指します。この選択は、現在の Node.js ランタイムバージョンには依存しません。ノードの実行可能ファイルで Node.js 20 を指し、tsc を Node.js 22 で解釈するように設定することもできます。TS コンパイラの名前空間名を使用することもできます。例えば、tsc-{MAJOR_VERSION} を、デフォルトの tsc 名が設定されている名前空間と独立して使用できます。

TS コンパイラのアクティブバージョンを管理するために役立つコマンド
  1. どのような alternatives が設定されているかを確認します。

    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