Configurar as dependências do aplicativo - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar as dependências do aplicativo

A aplicação pode ter dependências em alguns módulos Node.js, como os que você especifica nas instruções require(). Esses módulos são armazenados em um diretório node_modules. Quando a aplicação é executada, o Node.js carrega os módulos desse diretório. Para obter mais informações, consulte Loading from node_modules folders (Carregar das pastas node_modules) na documentação do Node.js.

Você pode especificar essas dependências usando um arquivo package.json. Se o Elastic Beanstalk detectar esse arquivo e não houver um diretório node_modules presente, o Elastic Beanstalk executa npm install como usuário de aplicativo da web. O comando npm install instala as dependências no diretório node_modules, que o Elastic Beanstalk cria de antemão. O comando npm install acessa os pacotes listados no arquivo package.json do registro npm público ou outros locais. Para obter mais informações, consulte o site npm Docs.

Se o Elastic Beanstalk detectar o diretório node_modules, não executa o npm install, mesmo que exista um arquivo package.json. O Elastic Beanstalk pressupõe que os pacotes de dependências estejam disponíveis no diretório node_modules para o Node.js acessar e carregar.

As seções a seguir fornecem mais informações sobre como estabelecer as dependências do módulo Node.js para a aplicação.

nota

Se você tiver algum problema de implantação quando o Elastic Beanstalk estiver executando o npm install, considere a adoção de uma abordagem alternativa. Inclua o diretório node_modules com os módulos de dependências no pacote de fontes da aplicação. Dessa forma você contorna os problemas de instalação das dependências do registro npm público enquanto você investiga o problema. Como a origem dos módulos de dependências é um diretório local, fazer isso também pode ajudar a reduzir o tempo de implantação. Para obter mais informações, consulte Incluir dependências do Node.js em um diretório node_modules.

Especificar as dependências do Node.js com um arquivo package.json

Use um arquivo package.json na raiz do código-fonte do projeto para especificar pacotes de dependência e para fornecer um comando para iniciar. Quando existe um arquivo package.json presente e não existe um diretório node_modules na raiz da origem do projeto, o Elastic Beanstalk executa npm install como usuário do aplicativo da web para instalar dependências do registro npm público. O Elastic Beanstalk também usa o comando start para iniciar a aplicação. Para obter mais informações sobre o arquivo package.json, consulte Specifying dependencies in a package.json file (Especificar dependências em um arquivo ) no site npm Docs.

Use a palavra-chave scripts para fornecer um comando para iniciar. Atualmente, a palavra-chave scripts é usada em vez da opção herdada NodeCommand no namespace aws:elasticbeanstalk:container:nodejs.

exemplo 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" } }
Modo de produção e dependências de desenvolvimento

Para especificar suas dependências no arquivo package.json, use os atributos dependências e devDependencies. O atributo dependências designa os pacotes exigidos pelo seu aplicativo em produção. O atributo devDependencies designa pacotes que são necessários apenas para desenvolvimento e testes locais.

O Elastic Beanstalk executa npm install como usuário do aplicativo da web com os seguintes comandos. As opções de comando variam dependendo da versão npm incluída na ramificação da plataforma em que seu aplicativo é executado.

  • npm v6 — O Elastic Beanstalk instala dependências no modo de produção por padrão. Ele usa o comando npm install --production.

  • npm v7 ou superior — O Elastic Beanstalk omite as devDependencies. Ele usa o comando npm install --omit=dev.

Ambos os comandos listados acima não instalam os pacotes que são devDependencies.

Se você precisar instalar os pacotes devDependencies, defina a propriedade de ambiente NPM_USE_PRODUCTION comofalse. Com esta configuração, não usaremos as opções acima ao executar o npm install. Isso resultará na instalação dos pacotes devDependencies.

SSH e HTTPS

A partir do lançamento da plataforma Amazon Linux 2 de 7 de março de 2023, você também pode usar os protocolos SSH e HTTPS para recuperar pacotes de um repositório Git. A ramificação da plataforma Node.js 16 suporta os protocolos SSH e HTTPS. Node.js 14 suporta somente o protocolo HTTPS.

exemplo package.json —Node.js 16 suporta HTTPS e SSH
... "dependencies": { "aws-sdk": "https://github.com/aws/aws-sdk-js.git", "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git" }

Versões e intervalos de versões

Importante

O recurso para especificar intervalos de versões não está disponível para ramificações da plataforma Node.js em execução no AL2023. Oferecemos suporte apenas a uma versão do Node.js em uma ramificação específica do Node.js no AL2023. Se o arquivo package.json especificar um intervalo de versões, ele será ignorado e a versão da ramificação da plataforma do Node.js será usada por padrão.

Use a palavra-chave engines no arquivo package.json para especificar a versão do Node.js que você deseja que a aplicação use. Você também pode especificar um intervalo de versões usando a notação npm. Para obter mais informações sobre a sintaxe para intervalos de versões, consulte Semantic Versioning using npm (Versionamento semântico usando o npm) no site Node.js. A palavra-chave engines no arquivo package.json do Node.js substitui a opção herdada NodeVersion no namespace aws:elasticbeanstalk:container:nodejs.

exemplo package.json: versão única do Node.js
{ ... "engines": { "node" : "14.16.0" } }
exemplo package.json: intervalo de versões do Node.js
{ ... "engines": { "node" : ">=10 <11" } }

Quando um intervalo de versões é indicado, o Elastic Beanstalk instala a versão do Node.js mais recente que a plataforma tem disponível dentro do intervalo. Neste exemplo, o intervalo indica que a versão deve ser maior ou igual à versão 10, mas menor que a versão 11. Como resultado, o Elastic Beanstalk instala a versão mais recente do Node.js, a 10.x.y, disponível na plataforma compatível.

Lembre-se de que você só pode especificar uma versão do Node.js que corresponda à ramificação da plataforma. Por exemplo, se você estiver usando a ramificação da plataforma Node.js 16, só poderá especificar uma versão 16.x.y do Node.js. Você pode usar as opções de intervalo de versões suportadas pelo npm para permitir mais flexibilidade. Para saber quais são as versões válidas do Node.js para cada ramificação da plataforma, consulte Node.js no guia Plataformas do AWS Elastic Beanstalk.

nota

Quando o suporte oferecido para a versão do Node.js que você estiver usando for removido da plataforma, será necessário alterar ou remover a configuração da versão do Node.js antes de fazer a atualização da plataforma. Isso pode ocorrer quando uma vulnerabilidade de segurança é identificada para uma ou mais versões do Node.js.

Nesse caso, ocorre uma falha na tentativa de atualizar para uma nova versão da plataforma não compatível com a versão do Node.js configurada. Para evitar a necessidade de criar um novo ambiente, altere a configuração da versão Node.jspackage.json para uma versão Node.js suportada pela versão antiga da plataforma e a nova. Você tem a opção de especificar um intervalo de versão Node.js que inclua uma versão suportada, conforme descrito anteriormente neste tópico. Você também tem a opção de remover a configuração e, em seguida, implantar o novo pacote de fonte.

Incluir dependências do Node.js em um diretório node_modules

Para implantar pacotes de dependência em instâncias de ambiente juntamente com o código da aplicação, inclua-os em um diretório chamado node_modules na raiz da fonte de seu projeto. Para obter mais informações, consulte Downloading and installing packages locally (Baixar e instalar pacotes localmente) no site npm Docs.

Ao implantar um diretório node_modules em uma versão da plataforma Node.js do Amazon Linux 2, o Elastic Beanstalk pressupõe que você está fornecendo seus próprios pacotes de dependências e evita instalar as dependências especificadas em um arquivo package.json. O Node.js procura as dependências no diretório node_modules. Para obter mais informações, consulte Loading from node_modules Folders (Carregar das pastas node_modules) na documentação do Node.js.

nota

Se você tiver algum problema de implantação enquanto o Elastic Beanstalk estiver executando npm install, considere a abordagem descrita neste tópico como uma solução alternativa enquanto investiga o problema.