No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

0D
17H
59M
21S

M贸dulos nativos en C++

16/31
Recursos

Aportes 94

Preguntas 26

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Atentos, node-gyp requiere Python 2 para funcionar

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 鈥渘o 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!

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.

A los que tengan el error 鈥渟tack 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

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

鈥榗lass v8::Local<v8::String>鈥 has no member named 鈥楾oLocalChecked鈥

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.

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

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)

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

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.

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

No recomiendo este curso para principiantes, Yo c贸mo usuario experimentado en Nodejs puedo decir que muchos de los conceptos que el instructor 鈥渆xplica鈥 dificilmente los podr铆a digerir un iniciado o principiante en programaci贸n. Adem谩s la poca profesionalidad del instructor para definir conceptos y apoyar en la explicaci贸n del c贸digo no ayuda mucho.

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. 馃槂

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```
const miAddon = require('./build/Release/addon');

console.log(miAddon.hola());
gyp ERR! find Python```

Problemas con Ubuntu WSL

Tratando de seguir la clase, me encontr茅 con el problema de que el proceso crasheaba cuando ejecutaba el comando:

$ node-gyp build

Dando errores de que no encontraba make en el sistema. Por lo que, busque el repositorio de node-gyp (ver aqu铆) y en este dan recomendaciones para cada sistema (Linux, macOS, Windows) y para Linux recomiendan instalar:

  • Python v3.7, v3.8, v3.9, or v3.10
  • make
  • Una cadena de herramientas de compilaci贸n C/C++ adecuada, como GCC.

Python

Normalmente, viene por defecto con Ubuntu, puedes verificarlo ejecutando:

$ python3 --version

Y deber铆a de salir la versi贸n que tienes instalada, sino puedes instalarlo ejecutando por separado los comandos:

$ sudo apt-get update
$ sudo apt-get install python3.10

GNU make

GNU Make es una herramienta que controla la generaci贸n de ejecutables y otros archivos no fuente de un programa a partir de los archivos fuente del mismo.
Puedes instarla ejecutando por separado los comandos:

$ sudo apt-get update
$ sudo apt-get install make

GCC Compilador

Personalmente, lo instale con un conjunto de otros compiladores llamado build-essential mediante los comandos, nuevamente ejecutando por separado:

$ sudo apt update
$ sudo apt install build-essential

Comprueba su instalaci贸n ejecutando el comando:

$ gcc --version

Y ahora s铆, puedes ejecutar los comandos de la clase, espero les sea de ayuda. Un saludo 馃槑

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

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

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

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

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!

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

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鈥s (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: 鈥楳ODULE_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 ```
Alguien m谩s de M茅xico que haya visto el albur en miAddon? 馃ぃ

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

隆Quiero un curso de integraci贸n de Node.js con C++!!

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 Windows me funcion贸 esto

npm install --global windows-build-tools

Usando PoweShell como administrador.


Y para linux:

sudo apt-get install build-essential

Esta clase me parecio fantastica para entender que para programar con otros lenguajes no es necesario entenderla al 100%, y la tarea interdisciplinaria se concatena gracias al buen node.

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 鈥渂uild鈥 pero no me dejo continuar, xq faltaba instalar los componente de 鈥淒esktop 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 鈥淒esktop 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!

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$ ```

que chistoso el nombre, 鈥渕iAddon鈥 ojo soy mexicano

Para los que est谩n tomando el curso a d铆a de hoy y tienen el error que les dice que deben instalar el kit de desarrollo de c#, solo deben instalar 鈥渧isual studio tools鈥, buscar dentro 鈥渧isual studio build tools 2022鈥 y seleccionar la casilla que dice 鈥渉erramientas para el escritorio con c++鈥 e instalar, luego reinician para aplicar cambio y es todo.
les dejo el enlace de descarga para el visual estudio tools.

enlace: https://visualstudio.microsoft.com/es/thank-you-downloading-visual-studio/?sku=BuildTools&WT.mc_id=dotnet-50103-juyoo&ocid=AID3035186

Estos m贸dulos nativos en C++ son muy 煤tiles cuando queremos programar a nivel del lenguaje ensamblador, desarrollar videojuegos Web o aplicaciones IoT.

Es un video introductorio a un tema que tiene mucha tela de donde cortar pero me parece genial que lo tenga el cusro, sino ni me entero que node puede hacer esto1

Si est谩s viendo esto en el 2022 y tienes un error como este Error: Module did not self-register:. ejecuta de nuevo node-gyp build.

melase esto en mac a yuda zsh: command not found: node-gyp

Existen m贸dulos que nos permiten convertir el c贸digo de C++ en un m贸dulo que se utilice desde JS, para este necesitaremos un archivo de c贸digo fuente.

npm i -g node-gyp requiere por m铆nimo Python 2, si usas entornos de Python les puede servir.


// Modulos nativos C++

// Como agregar modulos c++ addons

// const myAddon = require('addon')
const myAddon = require('./build/Release/addon')
// Aqui requerimos el addon que creamos con gyp, para que ejecutara c++ implementado
console.log(myAddon);
// needs Python, node-gyp 

no me gusto la clase, hace falta mas detalles sobre la instalaci贸n y las dependencias

Acabo de tener un error al ejecutar node-gyp build (a la fecha 02/07/22) y he podido solucionarlo, mi error era el siguiente:

gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (node:events:527:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Linux 5.10.16.3-microsoft-standard-WSL2
gyp ERR! command "/usr/bin/node" "/usr/bin/node-gyp" "build"
gyp ERR! cwd /home/user/platziWLS/fundamentos-nodejs/modulos/nativos
gyp ERR! node -v v17.8.0
gyp ERR! node-gyp -v v9.0.0
gyp ERR! not ok

actualice build-essential pero me seguia fallando, al final me funciono instalando node-gyp directamente en la carpeta nativos donde cree el build y no en la carpeta general del curso, dentro de /modulos/nativos/ use:

sudo npm i --location=global node-gyp

y ya me funciono el comando build

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++)

Clase 10/10

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 鈥榲oid (*)(v8::Local<v8::Object>)鈥 to 鈥榥ode::addon_register_func鈥 {aka 鈥榲oid (*)(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 鈥楴ODE_MODULE_X鈥
  840 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../hello.cc:23:1: note: in expansion of macro 鈥楴ODE_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 馃憣

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 鈥榲oid demo::Method(const v8::FunctionCallbackInfo<v8::Value>&)鈥:
../hola.cc:16:25: error: 鈥榗lass v8::Local<v8::String>鈥 has no member named 鈥楾oLocalChecked鈥
   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 鈥榲oid (*)(v8::Local<v8::Object>)鈥 to 鈥node::addon_register_func鈥 {aka 鈥榲oid (*)(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 鈥楴ODE_MODULE_X鈥
  607 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../hola.cc:23:1: note: in expansion of macro 鈥楴ODE_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?