Configuración de las dependencias de la aplicación en Elastic Beanstalk - AWS Elastic Beanstalk

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de las dependencias de la aplicación en Elastic Beanstalk

La aplicación puede tener dependencias en algunos módulos Node.js, como los que se especifican en las declaraciones require(). Los módulos se almacenan en un directorio node_modules. Cuando se ejecuta la aplicación, Node.js carga los módulos de este directorio. Para obtener más información, consulte Loading from node_modules folders (Carga desde carpetas node_modules) en la documentación de Node.js.

Puede especificar las dependencias de módulos mediante un archivo package.json. Si Elastic Beanstalk detecta este archivo y no hay un directorio node_modules, ejecuta npm install como el usuario webapp. El comando npm install instala las dependencias en el directorio node_modules, que Elastic Beanstalk crea previamente. El comando npm install accede a los paquetes que figuran en el archivo package.json desde el registro npm público o de otras ubicaciones. Para obtener más información, consulte el sitio web npm Docs.

Si Elastic Beanstalk detecta el directorio node_modules, no ejecuta npm install, incluso si existe un archivo package.json. Elastic Beanstalk asume que los paquetes de dependencias están disponibles en el directorio node_modules para que Node.js pueda acceder y cargar.

En las siguientes secciones, se ofrece más información sobre cómo establecer las dependencias de los módulos de Node.js de la aplicación.

nota

Si sufre algún problema de implementación cuando Elastic Beanstalk está ejecutando npm install, considere un enfoque alternativo. Incluya el directorio node_modules con los módulos de dependencias en el paquete de código fuente de la aplicación. De esta manera se pueden evitar problemas relacionados con la instalación de dependencias del registro npm público mientras se investiga el problema. Como los módulos de dependencia provienen de un directorio local, hacer esto también podría ayudar a reducir el tiempo de implementación. Para obtener más información, consulte Inclusión de dependencias Node.js en un directorio node_modules

Especificación de dependencias de Node.js con un archivo package.json

Incluya un archivo package.json en la raíz del proyecto de origen para especificar paquetes de dependencias y proporcionar un comando de inicio. Cuando hay un archivo package.json y no hay un directorio node_modules en la raíz de la fuente del proyecto, Elastic Beanstalk ejecuta npm install como el usuario webapp para instalar las dependencias del registro npm público. Elastic Beanstalk también utiliza el comando start para iniciar la aplicación. Para obtener más información sobre el archivo package.json, consulte Especificación de dependencias en un archivo package.json en el sitio web npm Docs.

Utilice la palabra clave scripts para proporcionar un comando de inicio. En la actualidad, la palabra clave scripts se utiliza en lugar de la opción heredada NodeCommand en el espacio de nombres aws:elasticbeanstalk:container:nodejs.

ejemplo 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 producción y dependencias de desarrollo

Para especificar las dependencias en el package.json archivo, utilice las dependencias y los atributos. devDependencies El atributo dependencias designa los paquetes que necesita la aplicación en producción. El devDependenciesatributo designa los paquetes que solo son necesarios para el desarrollo y las pruebas locales.

Elastic Beanstalk ejecuta npm install como usuario webapp con los siguientes comandos. Las opciones de comando varían según la versión de npm incluida en la ramificación de la plataforma en la que se ejecute la aplicación.

  • npm v6: de forma predeterminada, Elastic Beanstalk instala dependencias en modo de producción. Usa el comando npm install --production.

  • npm v7 o superior: Elastic Beanstalk omite el. devDependencies Usa el comando npm install --omit=dev.

Los dos comandos enumerados anteriormente no instalan los paquetes que sí lo están. devDependencies

Si necesita instalar los devDependenciespaquetes, establezca la propiedad de PRODUCTION entorno NPM USE _ _ enfalse. Con esta configuración, no utilizaremos las opciones anteriores cuando ejecutemos la instalación de npm. Esto provocará la instalación de devDependencieslos paquetes.

SSHy HTTPS

A partir de la versión de la plataforma Amazon Linux 2 del 7 de marzo de 2023, también puede utilizar los HTTPS protocolos SSH y para recuperar paquetes de un repositorio de Git. La rama Node.js 16 de la plataforma es compatible con HTTPS los protocolos SSH y. Node.jsLa 14 solo admite el HTTPS protocolo.

ejemplo package.json — Node.js 16 es compatible con y HTTPS 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" }

Versiones y rangos de las versiones

importante

La función para especificar los rangos de versiones no está disponible para las sucursales de la plataforma Node.js que se ejecutan en AL2 la versión 023. Solo admitimos una versión de Node.js dentro de una rama Node.js específica en AL2 023. Si el archivo package.json especifica un rango de versiones, lo ignoraremos y utilizaremos de forma predeterminada la versión de la ramificación de la plataforma de Node.js.

Utilice la palabra clave engines del archivo package.json para especificar la versión de Node.js que desea que utilice la aplicación. También puede especificar un rango de versiones mediante la notación npm. Para obtener más información sobre la sintaxis de los rangos de versiones, consulte Semantic Versioning using npm (Control de versiones semánticas mediante npm) en el sitio web de Node.js. La palabra clave engines del archivo package.json de Node.js reemplaza la opción heredada NodeVersion en el espacio de nombres aws:elasticbeanstalk:container:nodejs.

ejemplo package.json: versión de Node.js única
{ ... "engines": { "node" : "14.16.0" } }
ejemplo package.json: rango de versiones de Node.js
{ ... "engines": { "node" : ">=10 <11" } }

Cuando se indica un rango de versiones, Elastic Beanstalk instala la última versión de Node.js que la plataforma tiene disponible dentro del rango. En este ejemplo, el rango indica que la versión debe ser mayor o igual que la versión 10, pero inferior que la versión 11. Como resultado, Elastic Beanstalk instala la última versión 10.x.y de Node.js, que está disponible en la plataforma compatible.

Tenga en cuenta que solo puede especificar una versión de Node.js que corresponda con la ramificación de la plataforma. Por ejemplo, si utiliza la ramificación de la plataforma 16 de Node.js, puede especificar solo una versión 16.x.y de Node.js. Puede utilizar las opciones del rango de versiones admitidas por npm para aumentar la flexibilidad. Para obtener versiones válidas de Node.js para cada una de las ramificaciones de la plataforma, consulte Node.js en la guía Plataformas de AWS Elastic Beanstalk .

nota

Cuando la compatibilidad de la versión de Node.js que utiliza se elimine de la plataforma, deberá cambiar o eliminar la configuración de la versión de Node.js antes de realizar una actualización de la plataforma. Esto puede suceder cuando se identifica una vulnerabilidad de seguridad en una o varias versiones de Node.js

Cuando esto sucede, si se intenta actualizar a una nueva versión de la plataforma no compatible con la versión de Node.js configurada, se producirá un error. Para evitar la necesidad de crear un nuevo entorno, cambie la configuración de la versión Node.jspackage.json a una versión Node.js compatible con las versiones anterior y nueva de la plataforma. Tiene la opción de especificar un rango de versiones de Node.js que incluya una versión compatible, como se describió anteriormente en este tema. También tiene la opción de eliminar la configuración e implementar el nuevo paquete de origen.

Inclusión de dependencias Node.js en un directorio node_modules

Para implementar paquetes de dependencias en instancias del entorno junto con el código de la aplicación, inclúyalos en un directorio llamado node_modules en la raíz del origen del proyecto. Para obtener más información, consulte Downloading and installing packages locally (Descarga e instalación de paquetes a nivel local) en el sitio web npm Docs.

Al implementar un node_modules directorio en una versión de AL2 Node.js plataforma AL2 023/, Elastic Beanstalk asume que está proporcionando sus propios paquetes de dependencias y evita instalar las dependencias especificadas en un archivo package.json. Node.jsnode_modulesbusca las dependencias en el directorio. Para obtener más información, consulte Loading from node_modules Folders (Carga desde carpetas node_modules) en la documentación de Node.js.

nota

Si sufre algún problema de implementación cuando Elastic Beanstalk ejecuta npm install, considere la posibilidad de utilizar el enfoque descrito en este tema como solución alternativa mientras investiga el problema.