javascript - elastic - ¿Cómo usa AWS Beanstalk NPM cuando implementa una aplicación Nodejs?
express aws (4)
Actualmente, el entorno de Elastic Beanstalk ejecuta la npm install
sin el npm install
. Esto ocurre en la instancia en /opt/elasticbeanstalk/containerfiles/ebnode.py
antes de que se /opt/elasticbeanstalk/containerfiles/ebnode.py
las personalizaciones de entorno provistas por el desarrollador (es decir, las configuraciones de opciones de entorno), lo que significa que establecer NODE_ENV=production
en la configuración del entorno de EB tampoco impide devDependencies de ser procesado.
Tengo curiosidad sobre el flujo de trabajo general de una implementación de AWS Beanstalk. Supongo que ejecuta npm en algún momento para obtener los paquetes instalados en el servidor (s). Pero me preguntaba si AWS Beanstalk usa el último comando de ''npm install --production'' para instalar paquetes. Actualmente tengo un archivo packages.json como se muestra a continuación y me gustaría asegurar si es posible que solo las dependencias se estén instalando y no las devDependencias.
"dependencies": {
"express": "3.4.4",
"jade": "*",
"restify": "~2.6.0",
"assert": "~1.0.0",
"orchestrate": "0.0.2",
"chance": "~0.5.3"
},
"devDependencies": {
"mocha": "~1.15.1"
}
Puede obtener AWS Elastic Beanstalk para ejecutar npm install
en modo de producción si establece la variable de entorno NPM_CONFIG_PRODUCTION=true
. Puede hacerlo a través de la consola web Elastic Beanstalk.
Alternativamente, guarde el siguiente texto en cualquier archivo con el sufijo .config
dentro de un directorio llamado .ebextensions
en la raíz del proyecto y puede lograr lo mismo sin tener que configurarlos cada vez en la consola web:
option_settings:
- option_name: NPM_CONFIG_PRODUCTION
value: true
Nota: asegúrese de utilizar espacios, no pestañas, ya que es formato YAML.
Descubrí que el tiempo para actualizar el nuevo código node.js en un entorno t1.micro disminuyó de aproximadamente 5 minutos a 90 segundos, ahora que no estaba instalando todas las dependencias de desarrollo como ronco, karma, mocha, etc.
Una opción adicional es usar npm-shrinkwrap, que tiene el beneficio adicional de permitirle bloquear sus dependencias al mismo tiempo.
AWS Elastic Beanstalk lo sugiere aquí .
En las nuevas versiones de las pilas de Elastic Beanstalk Node, la configuración ha cambiado, como lo señala el comentario de @ etreworgy.
Puede verificar el comportamiento actual ejecutando dentro de una instancia de EC2:
cat /opt/elasticbeanstalk/containerfiles/ebnode.py | grep PRODUCTION
Vuelve, a partir de hoy:
if ''NPM_USE_PRODUCTION'' not in npm_env:
npm_env[''NPM_USE_PRODUCTION''] = ''true''
if npm_env[''NPM_USE_PRODUCTION''] == ''true'':
Por lo tanto, actualmente utiliza la npm install --production
por defecto .
Para aquellos que quieren desactivarlo (como yo estaba cuando fui a esta respuesta), tienes que crear un .ebextensions
anything.config dentro de una carpeta .ebextensions
en la carpeta raíz de tu proyecto (donde todo significa realmente cualquier cosa; node, npm, whatever tu quieres), con el contenido:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: NPM_USE_PRODUCTION
value: false