{"id":95725,"date":"2022-10-23T03:19:52","date_gmt":"2022-10-23T01:19:52","guid":{"rendered":"https:\/\/rmarketingdigital.com\/javascript\/escribiendo-modulos-nativos-de-node-js\/"},"modified":"2020-12-07T08:58:24","modified_gmt":"2020-12-07T11:58:24","slug":"escribiendo-modulos-nativos-de-node-js","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/","title":{"rendered":"Native Node.js-Module schreiben"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/#Casos-de-uso-comunes-de-los-modulos-nativos-de-Nodejs\" >Casos de uso comunes de los m\u00f3dulos nativos de Node.js<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/#%C2%BFCuales-son-los-modulos-nativos\" >\u00bfCu\u00e1les son los m\u00f3dulos nativos?<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/#Prerrequisitos\" >Prerrequisitos<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/#Creando-nuestra-extension-nativa-Nodejs\" >Creando nuestra extensi\u00f3n nativa Node.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/escribiendo-modulos-nativos-de-node-js\/#Ahora-vamos-a-ver-el-archivo-linea-por-linea\" >Ahora vamos a ver el archivo l\u00ednea por l\u00ednea<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<div itemprop=\"articleBody\">\n<p>Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender m\u00e1s de los m\u00f3dulos nativos de Node.js. Sigue leyendo para que te enteres c\u00f3mo hacer esto.<span id=\"more-114\"\/><\/p>\n<p>Si bien las extensiones nativas definitivamente no son un tema para principiantes, recomendar\u00eda este art\u00edculo a todos los desarrolladores de Node.js, para as\u00ed obtener un poco de conocimiento sobre c\u00f3mo funcionan.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Casos-de-uso-comunes-de-los-modulos-nativos-de-Nodejs\"><\/span>Casos de uso comunes de los m\u00f3dulos nativos de Node.js<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>El conocimiento sobre m\u00f3dulos nativos es \u00fatil cuando est\u00e1s agregando una extensi\u00f3n nativa como una dependencia, \u00a1Lo que ya podr\u00eda haber hecho!<\/p>\n<p>Solo revisa un poco la lista de algunos m\u00f3dulos populares que usan extensiones nativas. Est\u00e1s usando al menos uno de ellos, \u00bfO me equivoco?<\/p>\n<ul>\n<li>https:\/\/github.com\/wadey\/node-microtime<\/li>\n<li>https:\/\/github.com\/node-inspector<\/li>\n<li>https:\/\/github.com\/node-inspector\/v8-profiler<\/li>\n<li>http:\/\/www.nodegit.org\/<\/li>\n<\/ul>\n<p>Hay algunas razones por las que uno podr\u00eda considerar la creaci\u00f3n de m\u00f3dulos <strong>Node.js<\/strong> nativos, que incluyen, entre otros:<\/p>\n<ul>\n<li><strong>Aplicaciones de rendimiento cr\u00edtico:<\/strong> Seamos honestos, Node.js es excelente para realizar operaciones de entrada y salida as\u00edncronas, pero cuando se trata de un verdadero c\u00e1lculo de n\u00fameros, no es una elecci\u00f3n tan buena.<\/li>\n<li>Conexi\u00f3n a las API de nivel inferior, por ejemplo: sistema operativo.<\/li>\n<li>Creando un puente entre las bibliotecas C o C ++ y Node.js<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%C2%BFCuales-son-los-modulos-nativos\"><\/span>\u00bfCu\u00e1les son los m\u00f3dulos nativos?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Los complementos de Node.js son objetos compartidos enlazados din\u00e1micamente y escritos en C o C ++, que se pueden cargar en Node.js usando la funci\u00f3n <code>require ()<\/code>, y se usan como si fueran un m\u00f3dulo ordinario de Node.js.<\/p>\n<p>Esto significa que (si se hace correctamente) las peculiaridades de C \/ C ++ se pueden ocultar al consumidor del m\u00f3dulo. Lo que ver\u00e1n en cambio es que su m\u00f3dulo es un m\u00f3dulo Node.js, como si lo hubiera<\/p>\n<p>Node.js se ejecuta en el motor V8 JavaScript, que es un programa en C por s\u00ed solo. Podemos escribir c\u00f3digo que interact\u00fae directamente con este programa en C en su propio idioma, lo cual es genial porque podemos evitar una gran cantidad de costosos costos de serializaci\u00f3n y comunicaci\u00f3n.<\/p>\n<p>Adem\u00e1s, en una entrada de blog anterior que hemos aprendido sobre el costo del colector de basura Node.js. Aunque la recolecci\u00f3n de basura se puede evitar por completo si decides administrar la memoria tu mismo (porque C y C ++ no tiene un concepto de GC), crear\u00e1 problemas de memoria mucho m\u00e1s f\u00e1cilmente.<\/p>\n<p>Escribir extensiones nativas requiere conocimiento sobre uno o m\u00e1s de los siguientes temas:<\/p>\n<ul>\n<li>Libuv<\/li>\n<li>V8<\/li>\n<li>Node.js internals<\/li>\n<\/ul>\n<p>Todos ellos tienen una excelente documentaci\u00f3n. Si est\u00e1s entrando en este campo, te recomiendo leerlos.<\/p>\n<p>Sin m\u00e1s pre\u00e1mbulos, vamos a comenzar con el tema fuerte de este post:<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prerrequisitos\"><\/span>Prerrequisitos<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li><strong>Para sistema operativo Linux:<\/strong>\n<ol>\n<li>Usar python ( te recomiendo usar la v2.7, ya que la v3.xx no es compatible)<\/li>\n<li><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.gnu.org\/software\/make\/\">Make<\/a>.<\/li>\n<li>Usar una adecuada cadena de herramientas de compilaci\u00f3n de C o C ++, como GCC<\/li>\n<\/ol>\n<\/li>\n<li><strong>Para sistema operativo Mac:<\/strong>\n<ol>\n<li>Tener Xcode instalado: aseg\u00farate de que no solo lo instale, sino que lo inicie al menos una vez y acepte sus t\u00e9rminos y condiciones; de lo contrario, \u00a1no funcionar\u00e1!<\/li>\n<\/ol>\n<\/li>\n<li><strong>Para sistema operativo Windows:<\/strong>\n<ol>\n<li>Ejecutar <code>cmd.exe<\/code> como administrador e introduce el comando <code>npm install --global --production windows-build-tools<\/code>, que instalar\u00e1 todo por ti.<\/li>\n<li>Otra opci\u00f3n es instalar Visual Studio: (tiene todas las herramientas de construcci\u00f3n de C \/ C ++ preconfiguradas)<\/li>\n<li>O utiliza el subsistema Linux provisto por la \u00faltima compilaci\u00f3n de Windows. Con eso, sigue las instrucciones de LINUX anteriores.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Creando-nuestra-extension-nativa-Nodejs\"><\/span>Creando nuestra extensi\u00f3n nativa Node.js<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Vamos a crear nuestro primer archivo para la extensi\u00f3n nativa. Podemos usar la extensi\u00f3n<strong>\u00a0.cc<\/strong> que significa que es C con clases, o la extensi\u00f3n\u00a0<strong>.cpp<\/strong> que es la predeterminada para C ++. La Gu\u00eda de estilo de Google recomienda <strong>.cc<\/strong>, as\u00ed que para este tutorial seguir\u00e9 con ella.<\/p>\n<p>En este momento vamos a ver el archivo completo para luego explicarlo l\u00ednea por l\u00ednea.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n&#13;\n#include &lt;node.h&gt;&#13;\n&#13;\nconst int maxValue = 10;&#13;\nint numberOfCalls = 0;&#13;\n&#13;\nvoid WhoAmI(const v8::FunctionCallbackInfo&lt;v8::Value&gt;&amp; args) {&#13;\nv8::Isolate* isolate = args.GetIsolate();&#13;\nauto message = v8::String::NewFromUtf8(isolate, \"Yo soy Node Hero!\");&#13;\nargs.GetReturnValue().Set(message);&#13;\n}&#13;\n&#13;\nvoid Increment(const v8::FunctionCallbackInfo&lt;v8::Value&gt;&amp; args) {&#13;\nv8::Isolate* isolate = args.GetIsolate();&#13;\n&#13;\nif (!args[0]-&gt;IsNumber()) {&#13;\nisolate-&gt;ThrowException(v8::Exception::TypeError(&#13;\nv8::String::NewFromUtf8(isolate, \"El argumento debe ser un n\u00famero\")));&#13;\nreturn;&#13;\n}&#13;\n&#13;\ndouble argsValue = args[0]-&gt;NumberValue();&#13;\nif (numberOfCalls + argsValue &gt; maxValue) {&#13;\nisolate-&gt;ThrowException(v8::Exception::Error(&#13;\nv8::String::NewFromUtf8(isolate, \"\u00a1El mostrador se fue por las nubes!\")));&#13;\nreturn;&#13;\n}&#13;\n&#13;\nnumberOfCalls += argsValue;&#13;\n&#13;\nauto currentNumberOfCalls =&#13;\nv8::Number::New(isolate, static_cast&lt;double&gt;&#13;\n(numberOfCalls));&#13;\n&#13;\nargs.GetReturnValue().Set(currentNumberOfCalls);&#13;\n}&#13;\n&#13;\nvoid Initialize(v8::Local&lt;v8::Object&gt; exports) {&#13;\nNODE_SET_METHOD(exports, \"whoami\", WhoAmI);&#13;\nNODE_SET_METHOD(exports, \"increment\", Increment);&#13;\n}&#13;\n&#13;\nNODE_MODULE(module_name, Initialize)&#13;\n&#13;\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Ahora-vamos-a-ver-el-archivo-linea-por-linea\"><\/span>Ahora vamos a ver el archivo l\u00ednea por l\u00ednea<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n#include &lt;node.h&gt;&#13;\n<\/pre>\n<p>El <code>include<\/code> en C ++ es como <code>require()<\/code>en JavaScript. Extraer\u00e1 todo del archivo dado, pero en lugar de vincularlo directamente a la fuente, en C ++ tenemos el concepto de archivos de encabezado.<\/p>\n<p>Podemos declarar la interfaz exacta en los archivos de encabezado sin implementaci\u00f3n y luego podemos incluir las implementaciones por su archivo de encabezado. El enlazador C ++ se encargar\u00e1 de vincular estos dos juntos. Piensa en ello como un archivo de documentaci\u00f3n que describe tu contenido, que puede ser reutilizado desde su c\u00f3digo.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nvoid WhoAmI(const&#13;\nv8::FunctionCallbackInfo&lt;v8::Value&gt;&amp; args) {&#13;\nv8::Isolate* isolate = args.GetIsolate();&#13;\nauto message = v8::String::NewFromUtf8(isolate, \"Yo soy Node Hero!\");&#13;\nargs.GetReturnValue().Set(message);&#13;\n}&#13;\n[php]&#13;\n&#13;\nDebido a que esta ser\u00e1 una extensi\u00f3n nativa, el espacio de nombres v8 est\u00e1 disponible para su uso. Ten en cuenta la notaci\u00f3n &lt;strong&gt;v8::&lt;\/strong&gt;, que se utiliza para acceder a la interfaz del v8. Si no desea incluir &lt;strong&gt;v8::&lt;\/strong&gt; antes de usar cualquiera de los tipos provistos por el v8, puede agregarlo usando &lt;strong&gt;using&lt;\/strong&gt;\u00a0&lt;strong&gt;v8;&lt;\/strong&gt; a la parte superior del archivo. Luego, puede omitir todos los especificadores\u00a0&lt;strong&gt;v8::&lt;\/strong&gt; de espacio de nombres de sus tipos, pero esto puede introducir colisiones de nombres en el c\u00f3digo, as\u00ed que ten cuidado al usarlos. Para ser 100% claros, usar\u00e9 la notaci\u00f3n\u00a0&lt;strong&gt;v8::&lt;\/strong&gt; para todos los tipos de v8 en el c\u00f3digo mostrado.&#13;\n&#13;\nEn nuestro c\u00f3digo de ejemplo, tenemos acceso a los argumentos con los que se llam\u00f3 a la funci\u00f3n (desde JavaScript), a trav\u00e9s del objeto\u00a0&lt;strong&gt;args&lt;\/strong&gt; que tambi\u00e9n nos proporciona toda la informaci\u00f3n relacionada con la llamada.&#13;\n&#13;\nCon\u00a0&lt;strong&gt;v8::Isolate*&lt;\/strong&gt; estamos obteniendo acceso al alcance de JavaScript actual para nuestra funci\u00f3n. Los \u00e1mbitos funcionan igual que en JavaScript: podemos asignar variables y vincularlas a la vida \u00fatil de ese c\u00f3digo espec\u00edfico. No tenemos que preocuparnos por des-asignar estos trozos de memoria, porque los asignamos como si estuvi\u00e9ramos en JavaScript, y el recolector de basura se encargar\u00e1 de ellos autom\u00e1ticamente.&#13;\n&#13;\n[php]&#13;\n&#13;\nfunction () {&#13;\nvar a = 1;&#13;\n} \/\/ envergadura&#13;\n&#13;\n<\/pre>\n<p>\nV\u00eda <strong>args.GetReturnValue()\u00a0<\/strong>accedemos al valor de retorno de nuestra funci\u00f3n. Podemos configurarlo para lo que queramos siempre que sea desde el espacio <strong>v8::<\/strong> de nombres.<\/p>\n<p>C ++ tiene tipos incorporados para almacenar enteros y cadenas, pero JavaScript solo entiende sus propiostipos de objetos v8::. Mientras estemos en el \u00e1mbito del mundo de C ++, podemos utilizar los que est\u00e1n integrados en C ++, pero cuando tratamos con objetos de JavaScript e interoperabilidad con el c\u00f3digo de JavaScript, tenemos que transformar los tipos de C ++ en otros que se entienden. por el contexto de JavaScript. Estos son los tipos que est\u00e1n expuestos en v8 :: namespace como v8::Stringo v8::Object.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n&#13;\nvoid WhoAmI(const v8::FunctionCallbackInfo&lt;v8::Value&gt;&amp; args) {&#13;\nv8::Isolate* isolate = args.GetIsolate();&#13;\nauto message = v8::String::NewFromUtf8(isolate, \"Yo soy Node Hero!\");&#13;\nargs.GetReturnValue().Set(message);&#13;\n}&#13;\n&#13;\n<\/pre>\n<p>\nVeamos el segundo m\u00e9todo en nuestro archivo que incrementa un contador por un argumento proporcionado hasta un l\u00edmite superior de 10.<\/p>\n<p>Esta funci\u00f3n tambi\u00e9n acepta un par\u00e1metro de JavaScript. Cuando est\u00e1 aceptando par\u00e1metros de JavaScript, debe tener cuidado porque son objetos escritos con holgura. (Probablemente ya est\u00e9s acostumbrado a esto en JavaScript).<\/p>\n<p>La matriz de argumentos contiene <strong>v8::Objects<\/strong>, por lo que son todos objetos de JavaScript, pero ten cuidado con estos, porque en este contexto nunca podemos estar seguros de lo que pueden contener. Tenemos que verificar expl\u00edcitamente los tipos de estos objetos. Afortunadamente, hay m\u00e9todos auxiliares que se agregan a estas clases para determinar su tipo antes de la conversi\u00f3n de tipos.<\/p>\n<p>Para mantener la compatibilidad con el c\u00f3digo JavaScript existente, debemos lanzar alg\u00fan error si el tipo de argumentos es incorrecto. Para lanzar un error de tipo, tenemos que crear un objeto de error con el constructor<br \/><strong>v8::Exception::TypeError()<\/strong>. El siguiente bloque lanzar\u00e1 un <strong>TypeError<\/strong> si el primer argumento no es un n\u00famero.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n&#13;\nif (!args[0]-&gt;IsNumber()) {&#13;\nisolate-&gt;ThrowException(v8::Exception::TypeError(&#13;\nv8::String::NewFromUtf8(isolate, \"El argumento debe ser un n\u00famero\")));&#13;\nreturn;&#13;\n}&#13;\n&#13;\n<\/pre>\n<p>En JavaScript ese fragmento se ver\u00eda como:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n&#13;\nIf (typeof arguments[0] !== \u2018number\u2019) {&#13;\nthrow new TypeError(\u2018El argumento debe ser un n\u00famero\u2019)&#13;\n}&#13;\n&#13;\n<\/pre>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender m\u00e1s de los m\u00f3dulos nativos&#8230;<\/p>","protected":false},"author":1,"featured_media":95726,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1374],"tags":[],"class_list":["post-95725","post","type-post","status-publish","format-standard","has-post-thumbnail","category-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Escribiendo m\u00f3dulos nativos de Node.js - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/writing-native-node-js-modules\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Escribiendo m\u00f3dulos nativos de Node.js\" \/>\n<meta property=\"og:description\" content=\"Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/de\/javascript\/writing-native-node-js-modules\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-23T01:19:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"460\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"Escribiendo m\u00f3dulos nativos de Node.js\",\"datePublished\":\"2022-10-23T01:19:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/\"},\"wordCount\":1104,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/nodejs_logo-4946490.png\",\"articleSection\":[\"Javascript\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/\",\"name\":\"Escribiendo m\u00f3dulos nativos de Node.js - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/nodejs_logo-4946490.png\",\"datePublished\":\"2022-10-23T01:19:52+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/en\\\/javascript\\\/writing-native-node-js-modules\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/nodejs_logo-4946490.png\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/nodejs_logo-4946490.png\",\"width\":700,\"height\":460,\"caption\":\"nodejs_logo-4946490-6928412-png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Schreiben nativer Node.js-Module \u2013 R Marketing Digital","description":"Obwohl wir Zeit und Erfahrung in der Programmierung in JS haben, reicht die JavaScript-Leistung manchmal nicht aus, sodass Sie sich darauf verlassen m\u00fcssen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rmarketingdigital.com\/de\/javascript\/writing-native-node-js-modules\/","og_locale":"de_DE","og_type":"article","og_title":"Escribiendo m\u00f3dulos nativos de Node.js","og_description":"Aunue tengamos tiempo y experiencia programando en JS, existen ocasiones en que el rendimiento de JavaScript no es suficiente, por lo que se debe depender","og_url":"https:\/\/rmarketingdigital.com\/de\/javascript\/writing-native-node-js-modules\/","og_site_name":"R Marketing Digital","article_published_time":"2022-10-23T01:19:52+00:00","og_image":[{"width":700,"height":460,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png","type":"image\/png"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"Escribiendo m\u00f3dulos nativos de Node.js","datePublished":"2022-10-23T01:19:52+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/"},"wordCount":1104,"image":{"@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png","articleSection":["Javascript"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/","url":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/","name":"Schreiben nativer Node.js-Module \u2013 R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png","datePublished":"2022-10-23T01:19:52+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"Obwohl wir Zeit und Erfahrung in der Programmierung in JS haben, reicht die JavaScript-Leistung manchmal nicht aus, sodass Sie sich darauf verlassen m\u00fcssen","inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/rmarketingdigital.com\/en\/javascript\/writing-native-node-js-modules\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/nodejs_logo-4946490.png","width":700,"height":460,"caption":"nodejs_logo-4946490-6928412-png"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"R Digitales Marketing","description":"SEO Agentur | Werbung f\u00fcr soziale Netzwerke | Community Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"R Digitales Marketing","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/95725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/comments?post=95725"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/95725\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media\/95726"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media?parent=95725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/categories?post=95725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/tags?post=95725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}