update tutorial node instalar español ejemplos documentacion node.js amazon-web-services cross-compiling node-gyp aws-lambda

node.js - tutorial - Módulo de nodo de compilación cruzada con enlaces nativos con node-gyp



node js tutorial (4)

Estoy usando AWS Lambda, que implica crear un archivo de mi secuencia de comandos node.js, incluida la carpeta node_modules y cargarla en su infraestructura para que se ejecute.

Esto funciona bien, excepto cuando se trata de módulos de nodos con enlaces nativos (usando node-gyp). Debido a que el enlace se cumplió y el proyecto se archivó en mi computadora local (OS X), no es compatible con los servidores de AWS (Amazon Linux).

¿Cómo puedo compilar / instalar de forma cruzada un módulo de nodo (específicamente, node-sqlite3 ) para que cuando lo cargue en otro servidor se ejecute?


Las mismas líneas que la respuesta de Robert, cuando tuve que trabajar en mi MAC en un sistema operativo diferente, utilicé vm ware, como el virtualizador gratuito de Oracle, VirtualBox, para obtener un linux en mi mac, sin costo para mí. O regístrate para obtener una nueva cuenta de AWS, obtienes un micro por un año gratis. Úselo para obtener su linux box, haga lo que necesite allí.


Si bien no es realmente una solución a su problema, una solución muy fácil podría ser simplemente compilar los complementos nativos en una máquina Linux.

Para su situación particular, usaría Vagrant . Vagrant puede crear máquinas virtuales y configurarlas en cuestión de segundos.

  1. Encuentre una imagen del sistema operativo que se asemeje a la distribución de Linux de Amazon (Fedora, CentOS, otros que usan yum como administrador de paquetes - vea Wiki )
  2. Utilice un script de configuración simple que, cuando lo ejecute Vagrant al iniciar la máquina, ejecutará npm install (opcionalmente también podría eliminar la carpeta node_modules antes para garantizar una instalación limpia)
  3. Para mayor comodidad, el script también puede crear el archivo zip para la implementación
  4. Una vez que la instalación finaliza, la secuencia de comandos cerrará la máquina virtual para evitar el consumo innecesario de recursos del sistema
  5. ¡Desplegar!

Podría requerir un ajuste si las bibliotecas vinculadas no están en el mismo lugar en la máquina objetivo, pero en general me parece que es la mejor y más rápida solución.



Si bien la instalación de la aplicación con Vagrant puede ser suficiente en algunos casos, he encontrado que es necesario construir la aplicación en Linux, que es lo más parecido posible a la AMI Amazon Linux de Lambda .

Puede leer la respuesta original aquí: https://.com/a/34019739/303184

Pasos para hacerlo funcionar:

  1. Genera una nueva instancia de EC2. Asegúrese de que esté basado exactamente en la misma imagen que el tiempo de ejecución de AWS Lambda. Puede revisar los detalles de Lambda env aquí: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html . En nuestro caso, fue Amazon Linux AMI llamada amzn-ami-hvm-2015.03.0.x86_64-gp2 .

  2. Instale nvm y nvm para instalar la misma versión de Node.js que en AWS Lambda. En el momento de escribir esto, era v0.10.36 . Puede consultar http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html nuevamente para averiguarlo.

  3. Probablemente necesites instalar el compilador git & g ++ en el EC2. Puedes hacer esto corriendo

    sudo yum install git gcc-c++

  4. Finalmente, clone su aplicación a su nuevo EC2 e instale las dependencias de su aplicación:

    nvm use 0.10.36 npm install --production

  5. A continuación, puede descargar fácilmente node_modules utilizando scp o scp .