No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
21 Hrs
11 Min
59 Seg

Módulos nativos en C++

16/31
Recursos

Aportes 107

Preguntas 28

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “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!

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

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

`

No recomiendo este curso para principiantes, Yo cómo usuario experimentado en Nodejs puedo decir que muchos de los conceptos que el instructor “explica” 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.

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. :’(

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

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)

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

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. 😃

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

que chistoso el nombre, “miAddon” ojo soy mexicano

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

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

Para Windows me funcionó esto

npm install --global windows-build-tools

Usando PoweShell como administrador.


Y para linux:

sudo apt-get install build-essential

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

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

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

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

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…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 node-gyp@6.1.0
gyp info using node@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 ```

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

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

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

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 “visual studio tools”, buscar dentro “visual studio build tools 2022” y seleccionar la casilla que dice “herramientas 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

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

¡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

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?

MiguelG@LAPTOP-3733RI MINGW64 ~/Desktop/Curso de Node js/Modulo C++/modulos/nativos
$ apt install build-essential
bash: apt: command not found

MiguelG@LAPTOP-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 node-gyp@7.1.2
gyp info using node@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!

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

krztvl@LAPTOP-191TBDO7:/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
krztvl@LAPTOP-191TBDO7:/mnt/c/Users/Cristobal/Documents/Cursos programackrztvl@LAPTOP-191TBDO7:/mnt/c/Users/Cristobal/Documents/Cursos programacón/Curso_de_Fundamentos_de_Node.js/modulos/nativos$ ```
Hola, no logre ejecutar node-gyp configure, me sale un error de seguridad ![](https://static.platzi.com/media/user_upload/image-acb62b57-71a6-4a5f-85e3-30fa6de06ad2.jpg) Aunque lo ejecute con el usuario administrador y powershell no funciona, entendi la clase pero no me funciono!
* **Generate Your Projects (**GYP **):** Una herramienta que permite compilar proyectos grandes en diferentes plataformas, como Mac, Windows y Linux. GYP puede generar proyectos de Xcode, Visual Studio, Ninja build files y Makefiles. * **Node-gyp:** Una herramienta de línea de comandos multiplataforma que compila módulos complementarios nativos para Node.js. Node-gyp requiere Python 2.7 o Python 3.5+
En windows pide versión de python mayor a 3.6 y visual studio code, la opción de Desarrollo de escritorio en C++
A mi me pide versión de Python superior a 3.6, actualicé la versión de node a 20.15 pero me dió error por no tener esto "Desktop development with C++" pide instalar visual studio con esa opción.
**MÓDULOS NATIVOS EN C++** *Los **módulos** **nativos** en* **C++** *son una **característica** **clave** de* **Node.js** *que permiten **extender** su **funcionalidad utilizando código** de* **C++ *compilado****. Estos **módulos** se **utilizan** para **acceder** a **funcionalidades** de **bajo nivel** del **sistema** **operativo** y para **mejorar** el **rendimiento** de **ciertas** **operaciones** **críticas**. Los **desarrolladores** pueden **crear** sus **propios** **módulos nativos utilizando** la* **API** *de* **Node.js** *y las **herramientas** de **desarrollo** de* **C++***, lo que les permite **integrar** **bibliotecas** **existentes** **escritas** en* **C++** *o **implementar nuevas funcionalidades directamente** en* **C++***. Los **módulos nativos** se **cargan dinámicamente** en **tiempo** de **ejecución** y pueden ser **utilizados desde código*** **JavaScript**** *como* **cualquier otro módulo de Node.js***, lo que **proporciona** una **interfaz** **flexible** y **poderosa** para **interactuar** con el **sistema** **subyacente** y **mejorar** el **rendimiento** de las **aplicaciones**.*
Creo que es mucha teoría y nada aterrizado
`En esta clase, tuve problemas con el MSbuild de microsoft. ` `"msvs_windows_target_platform_version": "10.0.19..."` `pero no da mayor informacion el propmt de vscode mi sistema operativo es Win10. ` `lo que hice fue irme en "setup" dentro de` ` Microsoft Visual Studio\Installer y ejecutar ese setup.exe abrira una interfaz donde muestra componentes de VS build tools en la seccion Uncategorized esta el componente Node.js build tools instale este para que MSbuild corra en node y actualice la version de ` `"msvs_windows_target_platform_version": "10.0.19..." ` `a "10.0.20348.0" .. que tambien lo encuentran en el VS build tools. Vuelven a configurar y vuelven a ejecutar build. y listo. ya queda.` `por si alguno llega a tener el mismo problema saludos.`
Despues de varias horas sufriendo se logro el reto, me funciono utilizando python 3.12 y configurando la variable de entorno para python: ![](https://static.platzi.com/media/user_upload/image-3678f496-6ea5-4feb-963c-1fa1242c7cf5.jpg) ![](https://static.platzi.com/media/user_upload/image-136b9706-3489-454f-9d66-7d977f545142.jpg)
Estoy usando WSL para trabajar. Cuando descargué los archivos del profe y los pegué en mi carpeta, se crearon un montón de archivos terminados en "Zone.Identifier". Se me ocurrió usar lo que aprendimos en las clases pasadas para borrarlos todos a la vez `const { promisify } = require("util");const fs = require("fs/promises");` `const exec = promisify(require("child_process").exec);` `const delete_keyword = "Zone.Identifier";` `exec('find ./modules/````js ````nativos/ -type f -name "*"')  .then(({ ``stdout`` }) => {    const filename_to_delete = ``stdout``.split("\n").filter(``str`` => ``str``.includes(delete_keyword));    console.log(filename_to_delete);    ``return`` filename_to_delete;  })  .then(``filename_to_delete`` =>    Promise.all(      ``filename_to_delete``.map(``filename`` => {        fs.unlink(``filename``);      })    )  )  .then(console.log);`
Es realmente valioso tener clases donde muestran al profesor equivocarse, pues demuestran que es algo totalmente normal y más aún si estamos aprendiendo. A veces es frustrante equivocarnos y no encontrar el error, pero es parte del camino de aprender. Saludos al profesor Carlos Hernández.
aqui quede como pajarito en grama

Gente cuando vayan a instalar “node-gyp”, revisen bien que tnegan una version compatible de nodejs y npm, puede sonar como una bobada pequeña, pero me tomo tiempo encontrar ese pequeño detalle que no me dejaba continuar

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 

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!!

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

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 windows probablemente van a necesitar instalar <https://visualstudio.microsoft.com/es/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSFeaturesPage&passive=true&tailored=cplus&cid=2031#cplusplus>

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