配置您的应用程序的依赖项 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置您的应用程序的依赖项

您的应用程序可能有某些 Node.js 模块的依赖项,例如您在 require() 语句中指定的项。这些模块存储在 node_modules 目录中。当您的应用程序运行时,Node.js 将从此目录加载模块。有关更多信息,请参阅 Node.js 文档中的从 node_modules 文件夹加载

您可以使用 package.json 文件指定这些模块依赖项。如果 Elastic Beanstalk 检测到此文件,但 node_modules 目录不存在,则 Elastic Beanstalk 将运行 npm installnpm install 命令将依赖项安装在 Elastic Beanstalk 事先创建的 node_modules 目录中。npm install 命令会从公共 npm 注册表访问 package.json 文件中列出的软件包。有关更多信息,请参阅 npm Docs 网站。

如果 Elastic Beanstalk 检测到 node_modules 目录,则即使存在 package.json 文件,Elastic Beanstalk 也不会运行 npm install。Elastic Beanstalk 假设依赖项包在 node_modules 目录中可供 Node.js 访问和加载。

以下各部分提供有关为应用程序建立 Node.js 模块依赖项的更多信息。

注意

如果您在 Elastic Beanstalk 运行 npm install 时遇到任何部署问题,请考虑其他方法。在您的应用程序源包中包括含依赖模块的 node_modules 目录。这样做可以避免在调查问题时从公共 npm 注册表安装依赖项时出现问题。由于依赖模块来自本地目录,这样做也可能有助于缩短部署时间。有关更多信息,请参阅在 node_modules 目录中包括 Node.js 依赖项

使用 package.json 文件指定 Node.js 依赖项

包含项目源的根目录中的 package.json 文件来指定依赖项包并提供启动命令。当 package.json 文件存在,但项目源的根目录中不存在 node_modules 目录时,Elastic Beanstalk 会运行 npm install 来从公共 npm 注册表安装依赖项。Elastic Beanst alk还使用 start 命令来启动您的应用程序。有关 package.json 文件的更多信息,请参阅 npm Docs 网站中的package.json 文件中指定依赖项

使用 scripts 关键字来提供启动命令。当前使用 scripts 关键字,而不是 aws:elasticbeanstalk:container:nodejs 命名空间中的原有 NodeCommand 选项。

例 package.json - Express
{ "name": "my-app", "version": "0.0.1", "private": true, "dependencies": { "ejs": "latest", "aws-sdk": "latest", "express": "latest", "body-parser": "latest" }, "scripts": { "start": "node app.js" } }

使用 package.json 文件中的 engines 关键字指定您希望应用程序使用的 Node.js 版本。您还可以使用 npm 表示法指定版本范围。有关版本范围的语法的更多信息,请参阅 Node.js 网站上的使用 npm 的语义版本控制。Node.js package.json 文件中的 engines 关键字取代 aws:elasticbeanstalk:container:nodejs 命名空间中的原有 NodeVersion 选项。

package.json – 单一 Node.js 版本
{ ... "engines": { "node" : "14.16.0" } }
package.json – Node.js 版本范围
{ ... "engines": { "node" : ">=10 <11" } }

当指示版本范围时,Elastic Beanstalk 会安装该平台在该范围内可用的最新 Node.js 版本。在此示例中,范围指示版本必须大于或等于版本 10,但小于版本 11。因此,Elastic Beanstalk 安装了最新的 Node.js 版本 10.x.y,该版本在支持的平台上可用。

请注意,您只能指定与平台分支对应的 Node.js 版本。例如,如果您使用的是 Node.js 14 平台分支,则只能指定 14.x.y Node.js 版本。您可以使用 npm 支持的版本范围选项来提高灵活度。有关每个平台分支的有效 Node.js 版本,请参阅 Amazon Elastic Beanstalk 平台指南中的 Node.js

默认情况下,Elastic Beanstalk 在生产模式 (npm install --production) 下安装依赖项。如果您希望在环境实例上安装开发依赖项,请将 NPM_USE_PRODUCTION 环境属性设置为 false

注意

如果对您正在使用的 Node.js 版本的支持已从平台中移除,则您必须先更改或移除 Node.js 版本设置再进行平台更新。当在一个或多个 Node.js 版本中识别到安全漏洞时,可能会发生这种情况。

发生此情况时,尝试更新到不支持所配置的 Node.js 版本的新平台版本会失败。为避免需要创建新环境,请将 package.json 中的 Node.js 版本设置更改为旧平台版本和新平台版本都支持的 Node.js 版本。您可以选择指定包含受支持版本的 Node.js 版本范围,如本主题前面所述。您还可以选择删除设置,然后部署新的源包。

在 node_modules 目录中包括 Node.js 依赖项

要将依赖项程序包与应用程序代码一起部署到环境实例,请将它们包括在项目源根目录下名为 node_modules 的目录中。有关更多信息,请参阅 npm Docs 网站中的在本地下载和安装软件包

node_modules 目录部署到 Amazon Linux 2 Node.js 平台版本时,Elastic Beanstalk 假定您提供了自己的依赖项程序包,并避免安装 package.json 文件中指定的依赖项。Node.js 在 node_modules 目录中查找依赖项。有关详细信息,请参阅 Node.js 文档中的从 node_modules 文件夹加载

注意

如果您在 Elastic Beanstalk 运行 npm install 时遇到任何部署问题,请在调查问题时考虑使用本主题中描述的方法作为解决方法。