Módulos nativos en C++

Clase 16 de 31Curso de Fundamentos de Node.js

Resumen

¿Cómo trabajar con módulos nativos en Node.js?

Trabajar con módulos nativos en Node.js puede resultar un poco complejo al principio, pero con las herramientas adecuadas y una buena metodología, se convierte en una tarea manejable. En este contenido, exploraremos cómo compilar módulos C++ para usar en proyectos Node.js, ayudándonos a integrar funcionalidades avanzadas de manera eficiente.

¿Qué es Node-gyp y cómo se instala?

Node-gyp es una herramienta necesaria para compilar módulos nativos en Node.js. Es fundamental para quienes buscan extender la funcionalidad de sus aplicaciones Node.js por medio de add-ons escritos en C++.

Para instalar Node-gyp globalmente en tu sistema, abre la terminal y ejecuta:

npm install -g node-gyp

Recuerda que puede que necesites permisos de administrador. Si estás en Linux o Mac, puedes usar sudo antes del comando. Una vez instalado, tendrás Node-gyp listo para gestionar la compilación de tus módulos.

¿Cómo estructurar y codificar un módulo C++?

Para empezar a trabajar con tu módulo C++, debes crear primero un archivo de código fuente.

  1. Crea un archivo fuente C++:
    Dentro de la carpeta deseada (nativos), crea un archivo C++ que siga este esquema básico:

    #include <node.h>
    
    namespace demo {
       using v8::FunctionCallbackInfo;
       using v8::Isolate;
       using v8::Object;
       using v8::String;
       using v8::Value;
    
       void Hola(const FunctionCallbackInfo<Value>& args) {
          Isolate* isolate = args.GetIsolate();
          args.GetReturnValue().Set(String::NewFromUtf8(isolate, "Mundo").ToLocalChecked());
       }
    
       void Initialize(Local<Object> exports) {
          NODE_SET_METHOD(exports, "hola", Hola);
       }
    
       NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
    }  // namespace demo
    
  2. Crear archivo de configuración binding.gyp:
    Para que Node-gyp sepa cómo compilar tu módulo, necesitas un archivo binding.gyp:

    {
       "targets": [
          {
             "target_name": "addon",
             "sources": ["hola.cc"]
          }
       ]
    }
    

    Este archivo indica cómo compilar y nombrar tu módulo nativo.

¿Cómo compilar el módulo y generar el binario?

  1. Configurar el módulo:
    En la terminal, navega a la carpeta que contiene tu archivo binding.gyp y ejecuta:

    node-gyp configure
    

    Esto generará una carpeta "build" con todos los archivos necesarios para el proceso de compilación.

  2. Compilar el módulo:
    A continuación, compila el módulo ejecutando:

    node-gyp build
    

    Una vez completado, se generará un archivo binario en una subcarpeta dentro de "build/release".

¿Cómo utilizar el módulo recién creado en un archivo JavaScript?

Una vez que tienes tu módulo nativo compilado, es momento de integrarlo en un archivo JavaScript para aprovechar sus funcionalidades.

  1. Crea un archivo JS para importar el módulo:

    const myAddon = require('./build/Release/addon');
    
    console.log(myAddon.hola()); // Imprimirá "Mundo"
    

    Asegúrate de que la ruta en require apunte correctamente al archivo binario creado.

  2. Ejecutar el script:
    Finalmente, ejecuta tu aplicación Node.js.

    node index.js
    

    Esto debería mostrar la salida esperada desde la función nativa implementada.

Con esta metodología, puedes extender las capacidades de Node.js mediante la integración de módulos C++ personalizados. Con práctica y creatividad, las posibilidades son infinitas. ¡Sigue explorando y aprendiendo cada día más!