Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Módulos nativos en C++

16/31
Recursos

Aportes 80

Preguntas 19

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Atentos, node-gyp requiere Python 2 para funcionar

A los que tengan el error “stack Error: not found: make” al ejecutar el comando node-gyp build
-Utilizar:

sudo apt-get install build-essential

Si ese comando les da error:

sudo apt-get update

Luego, nuevamente:

sudo apt-get install build-essential

Y finalmente:

node-gyp build

No logro comprender muy bien el porque de todo esto. Quisa estaria bueno poder aplicarlo en un ejemplo util en lugar de un simple hola mundo.

Para los que están viendo este curso a mediados de 2021 (o más recientemente) deben tomar en cuenta que desde la fecha de lanzamiento del curso, node ya ha tenido bastantes actualizaciones por lo que puede que no te funcione al 100% lo visto en este video, con respecto a los módulos nativos de C++. Así que toca investigar un poco más de lo habitual p darle un vistazo a los comentarios de la misma comunidad … o con algo de suerte, tal vez todo te funciona de maravilla desde el inicio.

De igual forma también es importante que sepas que el uso de módulos nativos de C++ es una práctica “no fundamental” al momento de desarrollar en node, sin embargo, es sugerible comprender este tema lo mejor posible por el plus de conocimiento al que conduce, pues en la vida real uno nunca sabe qué locuras se le ocurrirán a nuestros clientes.

Si no entienden el tema no se desesperen, hagan su mayor esfuerzo y verán que las cosas se aclaran al final.

Happy Coding!

Para solucionar el error al ejecutar el comando node-gyp build:

‘class v8::Local<v8::String>’ has no member named ‘ToLocalChecked’

Solamente basta con borrar:

isolate, "mundo").ToLocalChecked());
                 ^~~~~~~~~~~~~~~~~

¯\(ツ)

la verdad no logre hacer correr siquiera el node-gyp configure, pero bueno, entendi la clase y que no estabamos haciendo nada funcional sino nos estaba mostrando lo que se podia hacer con node y otros lenguajes, seguire el curso sin completar esta clase esperando que no lo necesite en el futuro 😦

Módulos nativos en c++

JavaScript permite hacer uso de módulos nativos de c++. Para lograr esto debemos instalar sudo npm i -g node-gyp, este modulo de npm nos permite compilar módulos nativos de c++ en node.

Luego debemos tener listo nuestro archivo de código fuente en c++ junto a otro archivo .gyp, que nos ayudara hacer la compilación a JavaScript.

En este archivo .gyp le indicamos que va compilar, como se va llamar el archivo resultante y de donde va a tomar la info a convertir, todo esto lo dejamos como un json

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

luego le decimos a node que configure este modulo, con le comando node-gyp configure, como resultado tendremos en un directorio nuevo donde se encontraran diferentes archivos de código nativo, para finalizar con node-gyp build creamos nuestro modulo y estará listo para ser usado.

El objetivo de está clase es: Aprender a cómo compilar código de C++ para poder usarlos como módulos en JS.

Les detallo lo que tuve que hacer en windows para poder realizar esta clase
` EN WINDOWS:
Ejecutas
npm i -g --production windows-build-tools
npm i -g node-gyp

Copias la carpeta python27 que esta en

C:\Users\nombreUsuario\.windows-build-tools\

y las pegas en C:\

ahora si corres node-gyp configure en la carpeta de nativos y funciona :D

`

Tardé literalmente 3 días en hacer andar el node-gyp. Tuve que reinstalar el Python, configurar variables de entorno con la nueva ruta de Python y reinstalar todo el visual studio C++ porque lo tenía corrupto. :’(

Para todos los que tengan el mismo problema que yo a la hora de hacer node-gyp configure

**************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************```
Esto es porque les faltan unas herramientas de compilacion de c++
las pueden instalar Visual Studio Build Tools (utilizando la carga de trabajo "Visual C ++ build tools)

Buenas, muchos creo hemos tenido problemas para seguir este ejercicio, porque no se nos instala node-gyp, deberian tener un video con la solución, porque de verdad trate buscando en internet y no lo logre, esto para usuarios windows

Si no tenéis el compilador de C++ tenéis que instalarlo antes u os dará el error: make g++: Command not found

En mi caso, para distribuciones basadas en Debian/Ubuntu se solucionó con:

sudo apt install build-essential

Lo lindo de trabajar con Linux, es que todo te sale a la primera 😄😄😄

node-gyp: necesita un archivo json para guardar los datos del modulo que va a compilar, como se llamara y de donde obtendrá la información, este archivo se llama binding.gyp

Solución al problema en MacOS : gyp: No Xcode or CLT version detected!


Si tuvieron este error al ejecutar el comando node-gyp configure es probable que no tengan instaladas las herramientas de la línea de comandos de Xcode. Para comprobar si las tienen instalados pueden dirigirse a la carpeta ~/Library/Developer y ver si tienen una carpeta llamada CommandLineTools
\

<h3>Si no las tienen instaladas:</h3>

Se pueden instalar mediante el siguiente comando:

sudo xcode-select --install

\

<h3>Si sí las tienen instaladas y aún así tienen el error (como en mi caso):</h3>

1.- Borra la carpeta CommandLineTools
2.- Instala de nuevo las herramientas mediante el comando de arriba


Una vez instaladas las herramientas, reintenten el comando, a mi me funcionó sin ningún problema

El proceso de instalación puede ser muy tardado, tengan paciencia. 😃

gyp ERR! find Python```

Los errores que están hola.cc son debidos a que el motor de IntelliSense no tiene registrado la ruta de la librería node.h
Debemos agregarle la ruta a Include path. El Include path es un folder que guarda todas las librerías que son incluidas en un archivo. El IntelliSense usa este folder para buscar las librerías y así poder ofrecer las sugerencias y opciones de auto completado.
Para añadir la ruta de node al include path:

  1. Abrimos el Command Pallete de VS Code Ctrl + Shift+ P
  2. Escribimos C/C++: Edit Configurations (UI)
  3. Cuando abrimos ese espacio de configuración, buscamos Include path
  4. Añadimos /usr/local/include/node

Esto también se puede lograr modificando directamente el c_cpp_properties.json que tiene la configuración.
Por defecto, el JSON incluye la configuración "includePath": ["${workspaceFolder}/**"]
Solo necesitarían agregar la ruta /usr/local/include/node a ese array.

Esto debería quitar los íconos rojos que marcan los errores.

Estoy utilizando wsl2 y me arrojaba error al querer hacer.

node-gyp configure

Para solucionarlo utilicé.

npm install -g node-pre-gyp

SOLUCION "python3"
Para ver la version de Python en mac! $python --version

NOTA : en las mac traen la version 2 de python (no la desistales pueso la usa en su sistema operativo!)
1 - descargar la ultima version 3
https://www.python.org/downloads/

2 - Una vez instalada vemos que no nos muestra la utima version ya que mac conserva la version 2

3 - Tipeamos en terminal $ python3 --version
Listo!

ahora me dice que hay un error en #include <node.h>
ese es el unico problema que tengo hasta ahora con el compilador.

// hello.cc
#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::NewStringType;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  args.GetReturnValue().Set(String::NewFromUtf8(
      isolate, "mundo", NewStringType::kNormal).ToLocalChecked());
}

void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hola", Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)

}  // namespace demo```

es necesario ubicarse bien en las carpetas para que funcione bien.

Me dio un par de errores, pero creo que lo que se quiere mostrar es la funcionalidad.

Igual al hacerlo con otro lenguaje sera necesario referirse a la documentacion

const miAddon = require('./build/Release/addon');

console.log(miAddon.hola());

Me surgió una interrogante al ver la extención .cc en el archivo. Resulta que si es diferente del mundo Unix (MacOS y Linux) la extensión que se usa es .cpp, pero dentro de Unix es .cc

😲

al momento de escribir node-gyp configure tira el siguiente error:

node-gyp configure
internal/modules/cjs/loader.js:895
throw err;
^

Error: Cannot find module 'graceful-fs’
Require stack:

  • /usr/share/node-gyp/lib/node-gyp.js
  • /usr/share/node-gyp/bin/node-gyp.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:892:15)
    at Function.Module._load (internal/modules/cjs/loader.js:785:27)
    at Module.require (internal/modules/cjs/loader.js:956:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions…js (internal/modules/cjs/loader.js:1103:10)
    at Module.load (internal/modules/cjs/loader.js:914:32)
    at Function.Module._load (internal/modules/cjs/loader.js:822:14)
    at Module.require (internal/modules/cjs/loader.js:956:19) {
    code: ‘MODULE_NOT_FOUND’,
    requireStack: [
    ’/usr/share/node-gyp/lib/node-gyp.js’,
    ’/usr/share/node-gyp/bin/node-gyp.js’
    ]
    }

A nadie le dio problema en reproducir este video?? o solo a mi !!
Como a la mitad se queda pegado y toca mover lo con el mouse.

estoy en mac y me tira estos errores.

 node-gyp configure    
gyp info it worked if it ends with ok
gyp info using [email protected]6.1.0
gyp info using [email protected]12.13.0 | darwin | x64
gyp info find Python using Python version 3.7.5 found at "/usr/local/opt/python/bin/python3.7"
gyp info spawn /usr/local/opt/python/bin/python3.7
gyp info spawn args [
gyp info spawn args   '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Applications/XAMPP/xamppfiles/htdocs/platzi master/Fundamentos de nodeJS/nativos/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/carlosramirez/Library/Caches/node-gyp/12.13.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/carlosramirez/Library/Caches/node-gyp/12.13.0',
gyp info spawn args   '-Dnode_gyp_dir=/usr/local/lib/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/carlosramirez/Library/Caches/node-gyp/12.13.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Applications/XAMPP/xamppfiles/htdocs/platzi master/Fundamentos de nodeJS/nativos',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.

gyp: No Xcode or CLT version detected!
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/lib/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:210:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
gyp ERR! System Darwin 19.3.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/bin/node-gyp" "configure"
gyp ERR! cwd /Applications/XAMPP/xamppfiles/htdocs/platzi master/Fundamentos de nodeJS/nativos
gyp ERR! node -v v12.13.0
gyp ERR! node-gyp -v v6.1.0
gyp ERR! not ok ```

parece ser que este video no funciona por ciertas cosas que han cambiado en node.js
seguí esta clase ayudándome de este video y me funcionó.
https://www.youtube.com/watch?v=O4Rlq_NSkoM

Me sale este error

gyp info it worked if it ends with ok
gyp info using [email protected]        
gyp info using [email protected] | win32 | ia32
gyp info find Python using Python version 3.9.6 found at "C:\Users\joako\AppData\Local\Programs\Python\Python39\python.exe"
gyp ERR! find VS 
gyp ERR! find VS msvs_version not set from command line or npm configgyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 
or newer, try re-running with '--loglevel silly' for more details    
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - not found
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:  
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows       
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack     at VisualStudioFinder.fail (C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)  
gyp ERR! stack     at C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack     at VisualStudioFinder.findVisualStudio2013 (C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack     at C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack     at C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:372:16
gyp ERR! stack     at C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack     at C:\Users\joako\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:326:5)
gyp ERR! stack     at ChildProcess.emit (events.js:376:20)
gyp ERR! stack     at maybeClose (internal/child_process.js:1055:16) 
gyp ERR! System Windows_NT 10.0.19042
gyp ERR! command "C:\\Program Files (x86)\\nodejs\\node.exe" "C:\\Users\\joako\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "configure"
gyp ERR! cwd C:\Users\joako\Escuela_de_Desarrollo_Web_Platzi\Curso_de_Fundamentos_Node.js\FundamentosNodeJS\modulos\nativos
gyp ERR! node -v v14.17.0
gyp ERR! node-gyp -v v8.2.0
gyp ERR! not ok

Buen día, compañeros miren el error que me arroja la consola, alguno sabe poruqe se genera?

[email protected]-3733RI MINGW64 ~/Desktop/Curso de Node js/Modulo C++/modulos/nativos
$ apt install build-essential
bash: apt: command not found

[email protected]-3733RI MINGW64 ~/Desktop/Curso de Node js/Modulo C++/modulos/nativos
$ node-gyp configure
gyp info it worked if it ends with ok    
gyp info using [email protected]7.1.2
gyp info using [email protected]12.17.0 | win32 | x64
gyp ERR! find Python 
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python3" can be used
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if Python is C:\Python37\python.exe
gyp ERR! find Python - "C:\Python37\python.exe" could not be run
gyp ERR! find Python checking if Python is C:\Python27\python.exe
gyp ERR! find Python - "C:\Python27\python.exe" could not be run
gyp ERR! find Python checking if the py launcher can be used to find Python
gyp ERR! find Python - "py.exe" is not in PATH or produced an error```

Si devuelve error tipo: _Gyp ERR! stack Error: make failed with exit code: 2 _ Se debe tener Node actualizado. por esta fecha debemos estar trabajando por la version 12.19 LTS

Tuve muchos problemas para esta clase.

Error: Cannot find module 'graceful-fs'
Require stack:
Error: Cannot find module 'graceful-fs'
Require stack:

Gracias a StackOverFlow y a la virgen de Guadalupe, al parecer era necesario reinstalar NPM.
🤷‍♀️

si tiene algún error como este en windows después de instalar python msvs_version not set from command line or npm config, pueden usar el comando npm install --global windows-build-tools en la consola como administrador y esto configura visualStudio para correr bien node-gyp

En node js se puede utilizar códigos de otros lenguajes de programación y luego hacer uso de ellos invocandolos como modúlos de node js

Hola,

Para los de windows si tienen este error

node-gyp : File C:\Users\npm\node-gyp.ps1 cannot be loaded because running scripts is disabled on this system.

Prueben con estos 2 pasos:

Primero ejecutar el comando desde el powershell:

a. PS C:> Set-ExecutionPolicy RemoteSigned

PD Te dejo los link con mas detalles
https://tecadmin.net/powershell-running-scripts-is-disabled-system/

https://stackoverflow.com/questions/57673913/vsc-powershell-after-npm-updating-packages-ps1-cannot-be-loaded-because-runnin

b. Despues de remover las politicas pude crear al carpeta “build” pero no me dejo continuar, xq faltaba instalar los componente de “Desktop development with C++” esto lo corregi instalando el paquete mencionado desde visual studio 2019.

gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the “Desktop development with C++” workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************

Con esto me funciono espero les sirva…

Saludos

NO HE PODIDO SOLUCIONAR ESTO… 😦

Al parecer para esta clase hay que tener instalado python

Si alguien tiene este error:
Error: Module did not self-register
Solo tiene que ejecutar otra vez
node-gyp build

Buenas tardes, Hasta que puede hacerlo tuve que instalar python y también el visual Studio para instalar las herramientas c++ para que no me diera errores, Me sigue por el link

Para los que tengan problemas con esta clase, es importante que tengan todos los componentes y paquetes necesarias para poder hacer la compilacion del modulo nativo de c++. Para lo anterior por favor ver la siguiente documentacion que me ayudo mucho https://github.com/nodejs/node-gyp#on-windows

Modulos nativos, que big is Nodejs

en Mac. Cambie la extension .cc por .cpp
Y elimine una carpeta build que se genero.
Volví a correr el comando:

node-gyp configure

Y funciono!

Les dejo el link directo al addon de c++:
C++ Addons

Tengo problemas al ejecutar node-gyp build, me aparece lo siguiente

[email protected]:/mnt/c/Users/Cristobal/Documents/Cursos programacón/Curso_de_Fundamentos_de_Node.js/modulos/nativos$ node-gyp build
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp ERR! build error 
gyp ERR! stack Error: not found: make
gyp ERR! stack     at getNotFoundError (/mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/which/which.js:13:12)
gyp ERR! stack     at F (/mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/which/which.js:68:19)
gyp ERR! stack     at E (/mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/which/which.js:80:29)
gyp ERR! stack     at /mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/which/which.js:89:16
gyp ERR! stack     at /mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/isexe/index.js:42:5
gyp ERR! stack     at /mnt/c/Program Files (x86)/Nodist/bin/node_modules/node-gyp/node_modules/isexe/mode.js:8:5/node-gyp/node_modules/isexe/mode.js:8:5
gyp ERR! stack     at FSReqCallback.oncomplete (fs.js:169:21)
gyp ERR! System Linux 4.4.0-18362-Microsoft                             node_modules/node-gyp/bin/node-gyp.js" "build"
gyp ERR! command "/usr/bin/node" "/mnt/c/Program Files (x86)/Nodist/bin/de_Fundamentos_de_Node.js/modulos/nativosnode_modules/node-gyp/bin/node-gyp.js" "build"
gyp ERR! cwd /mnt/c/Users/Cristobal/Documents/Cursos programación/Curso_de_Fundamentos_de_Node.js/modulos/nativos                               ión/Curso_de_Fundamentos_de_Node.js/modulos/nativos$ 
gyp ERR! node -v v12.11.1
gyp ERR! node-gyp -v v6.1.0
[email protected]:/mnt/c/Users/Cristobal/Documents/Cursos [email protected]:/mnt/c/Users/Cristobal/Documents/Cursos programacón/Curso_de_Fundamentos_de_Node.js/modulos/nativos$ ```

Cada vez se amplia mas el mundo de NodeJS. Va a llevar mucho tiempo estudiarlo

Alguien más de México que haya visto el albur en miAddon? 🤣

Para quien tenga dudas, acerca de la utilidad o caso de uso de los módulos nativos en C/C++ podría ser por ejemplo en Iot Internet of Things, por ejemplo los Arduino o Raspberry Pi (Estos bien pueden ser desarrollados en lenguajes de programación C/C++)

¡Quiero un curso de integración de Node.js con C++!!

Para Windows me funcionó esto

npm install --global windows-build-tools

Usando PoweShell como administrador.


Y para linux:

sudo apt-get install build-essential

Clase 10/10

Ok, al igual que en otros lenguajes, esta es la clase de: Con lo que aprendiste, ahora construye un cohete y llega al sol. Jejejejeje

para los que actualmente no les funciona lo que hace el profesor, es de paciencia y apoyarse de los comentarios de los compañeros

Super esta clase no sabia que node se podia hacer algo asi

Para los que tengan problemas, donde dice que no se encontro Python o no es compatible, a mi me funciono borrar la aplicación de python y luego instalar anaconda, de esa manera funciono a la primera.

Interesante clase!!

Módulos nativos en C++

Instalar gyp

npm i -g node-gyp

Crear el archivo fuente hello.cc

Este es un ejemplo de hello world

// hello.cc
#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  args.GetReturnValue().Set(String::NewFromUtf8(
      isolate, "world").ToLocalChecked());
}

void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)

}  // namespace demo

Crear un binding.gyp

Tiene la configuración del módulo, el nombre y el archivo de recurso que tiene la lógica del módulo.

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

Configurar el módulo

Se ejecuta un comando que va a hacer la configuración necesaria

node-gyp configure

Y retorna esto en consola.

yp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp info find Python using Python version 3.8.10 found at "/usr/bin/python3"
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/santiagobr/.nvm/versions/node/v16.7.0/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/santiagobr/personalProjects/course-nodejs-basis/src/modules/natives/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/santiagobr/.nvm/versions/node/v16.7.0/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/santiagobr/.cache/node-gyp/16.7.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/santiagobr/.cache/node-gyp/16.7.0',
gyp info it worked if it ends with ok

Construir el módulo

node-gyp build

Y retorna esto en consola

gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/santiagobr/personalProjects/course-nodejs-basis/src/modules/natives/build'
  CXX(target) Release/obj.target/addon/hello.o
In file included from ../hello.cc:2:
/home/santiagobr/.cache/node-gyp/16.7.0/include/node/node.h:806:43: warning: cast between incompatible function types from ‘void (*)(v8::Local<v8::Object>)’ to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
  806 |       (node::addon_register_func) (regfunc),                          \
      |                                           ^
/home/santiagobr/.cache/node-gyp/16.7.0/include/node/node.h:840:3: note: in expansion of macro ‘NODE_MODULE_X’
  840 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../hello.cc:23:1: note: in expansion of macro ‘NODE_MODULE’
   23 | NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
      | ^~~~~~~~~~~
  SOLINK_MODULE(target) Release/obj.target/addon.node
  COPY Release/addon.node
make: Leaving directory '/home/santiagobr/personalProjects/course-nodejs-basis/src/modules/natives/build'
gyp info ok

Usar el módulo en Node

En u archivo vamos a hacer el llamado del módulo y ejecutarlo de la siguiente forma

const miAddon = require('./build/Release/addon')

console.log(miAddon.hello())

y hará lo que haga el módulo

Al segundo intento si salio 😄

Cree otro método en el hola. cc, configure, construí con node-gyp y llame en el js.

const miAddon = require('./build/Release/addon');
console.log(miAddon.hola()+" "+miAddon.mundo());

node-gyp: es un paquete de npm que permite compilar módulos nativos en node.

Me parece genial que hallan dejado los errores que obtiene el profesor porque asi es el dia a dia y eso ayuda a a aprender a leer los errores

Si vas a usar node-gyp debes saber que necesitas Python instalado ya que trabaja en ese entorno y la última versión de Visual Studio para tener las dependencias de C++.

Mmm, la verdad que no me está gustando este curso. Siempre termino teniendo que aprender todo yo leyendo por mi cuenta en blogs o en youtube… Esta clase en particular no entendi nada

Tampoco pude obtener el modulo addon directamente

Creo que debo practicar más la creación de archivos fuentes

No sabía que se podían hacer este tipo de cosas con Node, esto abre un mundo de posibilidades

const miaddon =require(’./build/release/addon’);
console.log(miAddon);

Si alguien tiene este problema en MacOS: gyp: No Xcode or CLT version detected!.
Le recomiendo seguir los pasos de este artículo, a mí me ayudó a solucionarlo!

https://medium.com/@mrjohnkilonzi/how-to-resolve-no-xcode-or-clt-version-detected-d0cf2b10a750

gran clase!

Esto está muy bueno 👌

me perdi totalmente, seguire adelante pero espero q no toques mas nada relacionado a esto en el curso. no se entiendo pero nada. por que obviamente en tu maquina va a andar profe, pero en la de nosotros seguramente en la mayoria falla

Para los usuarios de Windows les recomiendo instalar el paquete completo de Visual Studio, donde se instalan todos lo paquetes de Python, C y demas herramientas

Nose como solucionar el siguiente error

gyp info it worked if it ends with ok
gyp info using node-gyp@7.1.2
gyp info using node@10.19.0 | linux | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/mnt/c/Users/Anderson/Desktop/Programacion/javascript/node/modulos/nativo/build'
  CXX(target) Release/obj.target/addon/hola.o
../hola.cc: In function ‘void demo::Method(const v8::FunctionCallbackInfo<v8::Value>&)’:
../hola.cc:16:25: error: ‘class v8::Local<v8::String>’ has no member named ‘ToLocalChecked’
   16 |       isolate, "mundo").ToLocalChecked();
      |                         ^~~~~~~~~~~~~~
In file included from ../hola.cc:2:
../hola.cc: At global scope:
/home/anderson/.cache/node-gyp/10.19.0/include/node/node.h:573:43: warning: cast between incompatible function types from ‘void (*)(v8::Local<v8::Object>)’ to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
  573 |       (node::addon_register_func) (regfunc),                          \
      |                                           ^
/home/anderson/.cache/node-gyp/10.19.0/include/node/node.h:607:3: note: in expansion of macro ‘NODE_MODULE_X’
  607 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../hola.cc:23:1: note: in expansion of macro ‘NODE_MODULE’
   23 | NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
      | ^~~~~~~~~~~
make: *** [addon.target.mk:101: Release/obj.target/addon/hola.o] Error 1
make: Leaving directory '/mnt/c/Users/Anderson/Desktop/Programacion/javascript/node/modulos/nativo/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:198:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Linux 4.4.0-19041-Microsoft
gyp ERR! command "/usr/bin/node" "/usr/local/bin/node-gyp" "build"
gyp ERR! cwd /mnt/c/Users/Anderson/Desktop/Programacion/javascript/node/modulos/nativo
gyp ERR! node -v v10.19.0
gyp ERR! node-gyp -v v7.1.2
gyp ERR! not ok

Nooo, la verdad no puede con esta clase,
deberían especificar los problemas que se pueden tener

Creo que prefiero trabajar esta parte en python. Crear un subproceso en node que ejecuta el programa hecho en python.

=(

![](

A mi me da este desde Windows, debo instalar visual studio 2015? gyp info it worked if it ends with ok gyp info using [email protected] gyp info using [email protected] | win32 | x64 gyp info find Python using Python version 2.7.15 found at "C:\...\python27\python.exe" gyp ERR! find VS

interesante siempre genere módulos utilizando código puro de js pero ya con esto tengo múltiples ideas

Ejecuté este comando en ubuntu => sudo npm i -g node-gyp

y me salió esto en la terminal =>
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
/usr/bin/node-gyp -> /usr/lib/node_modules/node-gyp/bin/node-gyp.js

A alguien le sucedió lo mismo?