

AWS App Runner 从 2026 年 4 月 30 日起，将不再向新客户开放。如果您想使用 App Runner，请在该日期之前注册。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS App Runner 可用性变更](https://docs.aws.amazon.com/apprunner/latest/dg/apprunner-availability-change.html)。

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

# 使用 Node.js 平台
<a name="service-source-code-nodejs"></a>

**重要**  
App Runner 将于 2025 年 **12 月 1 日终止对 Node.js 12**、**Node.js 14**、**Node.js 16** 和 **Node.js 18** 的支持。有关建议和更多信息，请参阅[终止对托管运行时版本的支持](service-source-code.md#service-source-code.managed-platforms.eos)。

 AWS App Runner Node.js 平台提供托管运行时。使用基于 Node.js 版本的 Web 应用程序，每个运行时都可以轻松构建和运行容器。当你使用 Node.js 运行时时，App Runner 从托管的 Node.js 运行时镜像开始。此镜像基于[亚马逊 Linux Docker 镜像](https://hub.docker.com/_/amazonlinux)，包含某个 Node.js 版本的运行时包和一些工具。App Runner 使用此托管运行时映像作为基础映像，并添加您的应用程序代码来构建 Docker 映像。然后，它会部署此映像以在容器中运行您的 Web 服务。

 在使用 App Runner 控制台或 [CreateService](https://docs.aws.amazon.com/apprunner/latest/api/API_CreateService.html)API 操作[创建服务](manage-create.md)时，可以为 App Runner 服务指定运行时。您也可以将运行时指定为源代码的一部分。在包含在代码存储库中的 A [pp Runner 配置文件](config-file.md)中使用`runtime`关键字。托管运行时的命名约定是*<language-name><major-version>*。

有关有效的 Node.js 运行时名称和版本，请参阅[Node.js 运行时发布信息](service-source-code-nodejs-releases.md)。

每次部署或服务更新时，App Runner 都会将服务的运行时更新到最新版本。如果您的应用程序需要托管运行时的特定版本，则可以使用 [App Runner 配置文件](config-file.md)中的`runtime-version`关键字进行指定。您可以锁定到任何级别的版本，包括主要版本或次要版本。App Runner 仅对服务的运行时进行较低级别的更新。

Node.js 运行时的版本语法：`major[.minor[.patch]]`

例如：`22.14.0`

以下示例演示了版本锁定：
+ `22.14`— 锁定主要版本和次要版本。App Runner 仅更新补丁版本。
+ `22.14.0`— 锁定到特定的补丁版本。App Runner 不会更新你的运行时版本。

**Topics**
+ [Node.js 运行时配置](#service-source-code-nodejs.config)
+ [特定运行时版本的标注](#service-source-code-nodejs.callouts)
+ [Node.js 运行时示例](#service-source-code-nodejs.examples)
+ [Node.js 运行时发布信息](service-source-code-nodejs-releases.md)

## Node.js 运行时配置
<a name="service-source-code-nodejs.config"></a>

选择托管运行时时，还必须至少配置生成和运行命令。您可以在[创建](manage-create.md)或[更新](manage-configure.md) App Runner 服务时对其进行配置。您可以使用以下方法之一来执行此操作：
+ **使用 App Runner 控制台**-在创建过程或**配置选项卡的 “配置构**建” 部分中指定命令。
+ **使用 App Runner API**-调用[CreateService](https://docs.aws.amazon.com/apprunner/latest/api/API_CreateService.html)或 [UpdateService](https://docs.aws.amazon.com/apprunner/latest/api/API_UpdateService.html)API 操作。使用[CodeConfigurationValues](https://docs.aws.amazon.com/apprunner/latest/api/API_CodeConfigurationValues.html)数据类型的`BuildCommand`和`StartCommand`成员来指定命令。
+ **使用[配置文件](config-file.md)**-在最多三个构建阶段中指定一个或多个构建命令，并指定一个用于启动应用程序的运行命令。还有其他可选的配置设置。

提供配置文件是可选的。使用控制台或 API 创建 App Runner 服务时，您可以指定 App Runner 是在创建时直接获取配置设置还是从配置文件中获取配置设置。

具体而言，对于 Node.js 运行时，您还可以使用源存储库根目录`package.json`中命名的 JSON 文件配置构建和运行时。使用此文件，您可以配置 Node.js 引擎版本、依赖包和各种命令（命令行应用程序）。诸如 npm 或 yarn 之类的 Package 管理器将此文件解释为其命令的输入。

例如：
+ **npm install**安装中`dependencies`和`devDependencies`节点定义的软件包`package.json`。
+ **npm start**或者**npm run start**运行中`scripts/start`节点定义的命令`package.json`。

下面是一个 `package.json` 示例文件。

### package.json
<a name="service-source-code-nodejs.config.package-json-example"></a>

```
{
  "name": "node-js-getting-started",
  "version": "0.3.0",
  "description": "A sample Node.js app using Express 4",
  "engines": {
    "node": "22.14.0"
  },
  "scripts": {
    "start": "node index.js",
    "test": "node test.js"
  },
  "dependencies": {
    "cool-ascii-faces": "^1.3.4",
    "ejs": "^2.5.6",
    "express": "^4.15.2"
  },
  "devDependencies": {
    "got": "^11.3.0",
    "tape": "^4.7.0"
  }
}
```

有关更多信息`package.json`，请参阅 *npm* Doc [s 网站上创建 package.json 文件](https://docs.npmjs.com/creating-a-package-json-file)。

**提示**  
如果您的`package.json`文件定义了**start**命令，则可以将其用作 App Runner 配置文件中的**run**命令，如下例所示。  

**Example**  
package.json  

  ```
  {
    "scripts": {
      "start": "node index.js"
    }
  }
  ```
apprunner.yaml  

  ```
  run:
    command: npm start
  ```
当你在开发环境**npm install**中运行时，npm 会创建该文件`package-lock.json`。此文件包含 npm 刚安装的软件包版本的快照。此后，当 npm 安装依赖项时，它会使用这些确切的版本。如果你安装 yarn，它会创建一个`yarn.lock`文件。将这些文件提交到您的源代码存储库中，以确保您的应用程序与您开发和测试的依赖项版本一起安装。
您也可以使用 App Runner 配置文件来配置 Node.js 版本并启动命令。执行此操作时，这些定义会覆盖中的定义`package.json`。中的`node``package.json`版本与 App Runner 配置文件中的`runtime-version`值发生冲突会导致 App Runner 构建阶段失败。

## 特定运行时版本的标注
<a name="service-source-code-nodejs.callouts"></a>

### Node.js 22 和 Node.js 18（修订的 App Runner 版本）
<a name="service-source-code-nodejs.callouts.nodejs18"></a>

App Runner 现在基于以下运行时版本为应用程序运行更新的构建流程：Python 3.11、Node.js 22 和 Node.js 18。如果您的应用程序在其中一个运行时版本上运行，请参阅[托管运行时版本和 App Runner 版本](service-source-code.md#service-source-code.build-detail)，了解有关修订后的构建过程的更多信息。使用所有其他运行时版本的应用程序不受影响，它们将继续使用原始的构建过程。

## Node.js 运行时示例
<a name="service-source-code-nodejs.examples"></a>

以下示例显示了用于构建和运行 Node.js 服务的 App Runner 配置文件。

**注意**  
这些示例中使用的运行时版本是*22.14.0*。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本，请参阅[Node.js 运行时发布信息](service-source-code-nodejs-releases.md)。

### Node.js 的最小配置文件
<a name="service-source-code-nodejs.examples.minimal"></a>

此示例显示了一个可以与 Node.js 托管运行时配合使用的最小配置文件。有关 App Runner 使用最小配置文件做出的假设，请参阅[配置文件示例](config-file-examples.md#config-file-examples.managed)。

**Example apprunner.yaml**  

```
version: 1.0
runtime: nodejs22
build:
  commands:    
    build:
      - npm install --production                                  
run:                              
  command: node app.js
```

### Node.js 扩展配置文件
<a name="service-source-code-nodejs.examples.extended"></a>

此示例显示了在 Node.js 托管运行时中使用所有配置密钥的情况。

**注意**  
这些示例中使用的运行时版本是*22.14.0*。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本，请参阅[Node.js 运行时发布信息](service-source-code-nodejs-releases.md)。

**Example apprunner.yaml**  

```
version: 1.0
runtime: nodejs22
build:
  commands:
    pre-build:
      - npm install --only=dev
      - node test.js
    build:
      - npm install --production
    post-build:
      - node node_modules/ejs/postinstall.js
  env:
    - name: MY_VAR_EXAMPLE
      value: "example"
run:
  runtime-version: 22.14.0
  command: node app.js
  network:
    port: 8000
    env: APP_PORT
  env:
    - name: MY_VAR_EXAMPLE
      value: "example"
```

### Node.js 扩展配置文件 — Node.js 22（使用修订后的版本）
<a name="service-source-code-nodejs.examples.extended-v2"></a>

此示例显示了如何在 Node.js 托管运行时中使用所有配置密钥`apprunner.yaml`。此示例包括一`pre-run`节，因为此版本的 Node.js 使用的是修订后的 App Runner 版本。

只有修订后的 App Runner 版本支持该`pre-run`参数。如果您的应用程序使用原始 App Runner 版本支持的运行时版本，请不要在配置文件中插入此参数。有关更多信息，请参阅 [托管运行时版本和 App Runner 版本](service-source-code.md#service-source-code.build-detail)。

**注意**  
这些示例中使用的运行时版本是*22.14.0*。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本，请参阅[Node.js 运行时发布信息](service-source-code-nodejs-releases.md)。

**Example apprunner.yaml**  

```
version: 1.0
runtime: nodejs22
build:
  commands:
    pre-build:
      - npm install --only=dev
      - node test.js
    build:
      - npm install --production
    post-build:
      - node node_modules/ejs/postinstall.js
  env:
    - name: MY_VAR_EXAMPLE
      value: "example"
run:
  runtime-version: 22.14.0
  pre-run: 
    - node copy-global-files.js
  command: node app.js
  network:
    port: 8000
    env: APP_PORT
  env:
    - name: MY_VAR_EXAMPLE
      value: "example"
```

### 带有 Grunt 的 Node.js 应用程序
<a name="service-source-code-nodejs.examples.grunt"></a>

此示例说明如何配置使用 Grunt 开发的 Node.js 应用程序。[Grunt](https://gruntjs.com/) 是一个命令行 JavaScript 任务运行器。它运行重复性任务并管理流程自动化以减少人为错误。Grunt 和 Grunt 插件是使用 npm 安装和管理的。您可以通过将`Gruntfile.js`文件包含在源存储库的根目录中来配置 Grunt。

**Example package.json**  

```
{
  "scripts": {
    "build": "grunt uglify",
    "start": "node app.js"
  },
  "devDependencies": {
    "grunt": "~0.4.5",
    "grunt-contrib-jshint": "~0.10.0",
    "grunt-contrib-nodeunit": "~0.4.1",
    "grunt-contrib-uglify": "~0.5.0"
  },
  "dependencies": {
    "express": "^4.15.2"
  },
}
```

**Example Gruntfile.js**  

```
module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    }
  });

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // Default task(s).
  grunt.registerTask('default', ['uglify']);

};
```

**Example apprunner.yaml**  
这些示例中使用的运行时版本是*22.14.0*。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本，请参阅[Node.js 运行时发布信息](service-source-code-nodejs-releases.md)。

```
version: 1.0
runtime: nodejs22
build:
  commands:
    pre-build:
      - npm install grunt grunt-cli
      - npm install --only=dev
      - npm run build
    build:
      - npm install --production
run:
  runtime-version: 22.14.0
  command: node app.js
  network:
    port: 8000
    env: APP_PORT
```

# Node.js 运行时发布信息
<a name="service-source-code-nodejs-releases"></a>

**重要**  
App Runner 将于 2025 年 **12 月 1 日终止对 Node.js 12**、**Node.js 14**、**Node.js 16** 和 **Node.js 18** 的支持。有关建议和更多信息，请参阅[终止对托管运行时版本的支持](service-source-code.md#service-source-code.managed-platforms.eos)。

**注意**  
App Runner 的标准弃用政策是，当运行时的任何主要组件达到社区长期支持 (LTS) 终止且安全更新不再可用时，就会弃用该运行时。在某些情况下，App Runner 可能会将运行时的弃用延迟一段时间，超过运行时支持的语言版本的 end-of-support日期。这种情况的一个例子可能是延长对运行时的支持，让客户有时间进行迁移。

本主题列出了 App Runner 支持的 Node.js 运行时版本的完整详细信息。


**支持的运行时版本 — 修订的 App Runner 版本**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/apprunner/latest/dg/service-source-code-nodejs-releases.html)

**注意**  
App Runner 为最近发布的特定主要运行时提供了修订后的构建流程。因此，您将在本文档的某些部分中看到对*修订后的 App Runner 版本**和原始 App Runner 版本*的引用。有关更多信息，请参阅[托管运行时版本和 App Runner 版本](service-source-code.md#service-source-code.build-detail)。


**支持的运行时版本 — 修订的 App Runner 版本**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/apprunner/latest/dg/service-source-code-nodejs-releases.html)




**支持的运行时版本-原始 App Runner 版本**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/apprunner/latest/dg/service-source-code-nodejs-releases.html)