TypeScript在 AL2 023 - Amazon Linux 2023
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

TypeScript在 AL2 023

注意

本文档提供了有关其基于 TypeScript Node.js 的执行环境的基本信息。它还涵盖了典型的开发工作流程,并解释了如何 TypeScript 在 AL2 023 中打包以提供一致且可重现的开发环境。

TypeScript(TS) 是一种基于 JavaScript (JS) 的编程语言,它提供了 JS 的所有功能,还使用类型系统对其进行了扩展。在典型场景中,用 TS 编写的程序首先被翻译成 JS 代码,然后像任何其他常规 JS 程序一样执行Node.js。在 TS 的特定术语中,这种翻译过程称为 “编译”,由名为 tsc 的 “编译器” 执行tsc 编译器本身是用 JS 编写的,因此要运行,它还需要一个 JS 运行时环境,例如Node.js。与其他一些 JS 运行时环境不同,Node.js目前仅支持实验性和轻量级 TS。完整的 TS 支持(包括类型检查)仍然需要使用第三方软件包,例如打字稿。在Node.js运行时环境中获取 tsc(TS 编译器)的预期方法是安装 typescript 节点模块。这可以使用其中一个包管理器来完成,通常是 npm。使用 npm 安装 TS 编译器有两种方法:全局安装和在项目中。官方推荐的方法是按项目安装 TS 编译器,这样可以确保项目的长期一致性和可重复性。但是,全局安装 TS 编译器可能仍然很有用,因为它为整个主机及其 JS 运行时提供了相同的版本,因此也为没有在本地安装 TS 编译器的项目提供了相同的版本。这正是 Amazon Linux 上可用的 RPM 包(例如nodejs20-typescriptnodejs22-typescript)安装 TS 编译器的方式:在系统级别全局安装,每个支持的Node.js版本分别安装。

t sc 不直接依赖于任何Node.js版本。编译器需要一定级别的运行时功能,这些功能是通过 t ar get 和 lib 之类的选项在特殊文件 (tsconfig.json) 中定义的。这些选项的值表示 ECMAScript(ES) 标准的一个版本,JS 运行时环境可能(也可能不支持)。不同版本的Node.js支持不同版本的 ES 标准。的版本越新Node.js,所支持的 ES 标准版本就越高、越完整。如果项目的根目录中不存在 t sconfig.json,则将使用默认的配置选项集。nod e.green 提供了不同版本的兼容性表Node.js以及各种 ES 标准版本所支持的功能。t sc 有 100 多个不同的选项,可以在 tsconfig.j s on 中定义。当某些配置选项在另一个文件中定义然后包含在主文件中时,也支持配置链接。这种方法允许用户安装与特定版本兼容的 Base TS ConfigNode.js,然后使用特定于项目的选项对其进行扩展。幸运的是,的 Base TS 配置可用作节点模块,可以使用 n pm 将其安装在项目文件夹中。Node.js以下是Node.js版本 182022 的配置源代码。

Node.js基于的运行时设计有一定的弱点:它仅支持主机上运行时的一个版本,并且要求所有依赖项在项目级别的可重复性和一致性。这导致了以下常见的使用方法 TypeScript:TS 编译器、当前Node.js版本的 TS 基本配置以及所有软件依赖项都安装在本地项目中。尽管全局安装的节点模块应该只是 CLI 工具,例如 npm,但也是 CLI 工具的 tsc 很少在全球范围内安装。值得庆幸的是,tsc 的全局(系统范围)和本地(项目内)安装可以毫无问题地共存,也可以是独立使用的不同版本。请注意,本地安装的 tsc 应使用 npx 工具执行,该工具与 npm 一起安装。因此,即使使用系统 TS 编译器,用户也可以选择运行时组件的版本,例如Node.js(通过备选方案切换活动版本)、TS 编译器(要么在本地安装,要么在全局安装并通过备选方案切换活动版本),并根据特定需求对其进行配置。

Amazon Linux 以与其他全局安装的节点模块(例如 npm)相同的方式打包 TS 编译器,基本Node.js版本为每个版本。软件包和二进制文件采用命名空间,其名称中包含的主要Node.js版本。编译器的默认可执行文件名称 tsc 在运行时由备选工具管理,并指向已安装该文件并将由其执行的Node.js当前活动版本。此选择不取决于当前的Node.js运行时版本。可以将节点可执行文件指向 Node.js 20,并将 tsc 配置为由 Node.js 22 解释。也可以使用 TS 编译器的命名空间名称,例如 t sc-{MAJOR_VERSION},这与默认 ts c 名称的配置无关。

一些用于管理 TS 编译器活动版本的有用命令
  1. 检查配置了哪些备选方案

    alternatives --list
  2. 检查 tsc 的当前配置

    alternatives --display tsc
  3. 以交互方式更改版本 tsc

    alternatives --config tsc
  4. 切换到手动模式并选择特定版本

    alternatives --set tsc /usr/bin/tsc-{MAJOR_VERSION}
  5. 切换回 auto 版本选择模式

    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