{"id":162272,"date":"2024-10-11T19:50:33","date_gmt":"2024-10-11T17:50:33","guid":{"rendered":"https:\/\/hifivem.com\/?p=162272"},"modified":"2026-08-10T07:53:30","modified_gmt":"2026-08-10T05:53:30","slug":"lenguajes-de-codificacion-fivem","status":"publish","type":"post","link":"https:\/\/fivemx.com\/es\/lenguajes-de-codificacion-fivem\/","title":{"rendered":"FiveM Lenguajes de programaci\u00f3n: Lua, JavaScript y C# comparados"},"content":{"rendered":"<p><!-- fivemx-blog-portfolio-wave4:2026-08-10:fivem-coding-languages --><\/p>\n<p><strong>FiveM es compatible oficialmente con Lua, JavaScript y C#. Elige el entorno de ejecuci\u00f3n que se adapte a tu framework, las habilidades de tu equipo y las bibliotecas necesarias, no una supuesta clasificaci\u00f3n de rendimiento universal.<\/strong> Los tres pueden llamar a las funciones nativas de FiveM, manejar eventos y exponer API de recursos. Las diferencias pr\u00e1cticas son el l\u00edmite del tiempo de ejecuci\u00f3n, el ecosistema de paquetes, el flujo de trabajo de compilaci\u00f3n y el c\u00f3digo ya utilizado por tus dependencias.<\/p>\n<p><em>Revisado el 10 de agosto de 2026 seg\u00fan la documentaci\u00f3n oficial de Cfx.re para los <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/\" rel=\"nofollow noopener\" target=\"_blank\">tiempos de ejecuci\u00f3n compatibles<\/a>, <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/introduction\/\" rel=\"nofollow noopener\" target=\"_blank\">introducci\u00f3n a los scripts<\/a> y <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-reference\/resource-manifest\/resource-manifest\/\" rel=\"nofollow noopener\" target=\"_blank\">manifiestos de recursos<\/a>. El comportamiento del tiempo de ejecuci\u00f3n puede cambiar, as\u00ed que verifica esas p\u00e1ginas antes de iniciar un proyecto de larga duraci\u00f3n.<\/em><\/p>\n<h2>Comparaci\u00f3n de lenguajes de FiveM<\/h2>\n<table>\n<thead>\n<tr>\n<th>Tiempo de ejecuci\u00f3n<\/th>\n<th>Buena opci\u00f3n<\/th>\n<th>L\u00edmite importante<\/th>\n<th>Flujo de trabajo t\u00edpico<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Lua<\/td>\n<td>Marcos Lua existentes, recursos compactos y ejemplos directos de FiveM<\/td>\n<td>CfxLua es un tiempo de ejecuci\u00f3n Lua 5.4 modificado, no una instalaci\u00f3n Lua de sistema arbitraria<\/td>\n<td>Edite los archivos fuente y c\u00e1rguelos a trav\u00e9s del manifiesto de recursos<\/td>\n<\/tr>\n<tr>\n<td>JavaScript<\/td>\n<td>Equipos que utilizan herramientas JavaScript\/TypeScript y npm<\/td>\n<td>Los scripts de cliente no reciben API de navegador o Node.js; los scripts de servidor usan el tiempo de ejecuci\u00f3n de Node de FiveM<\/td>\n<td>Ejecute la fuente directamente o compile\/agrupe TypeScript en JavaScript listado en el manifiesto<\/td>\n<\/tr>\n<tr>\n<td>C#<\/td>\n<td>.Equipos .NET, c\u00f3digo de dominio tipado y proyectos compilados<\/td>\n<td>El recurso debe enviar los ensamblados y archivos esperados por el tiempo de ejecuci\u00f3n Cfx.re<\/td>\n<td>Construya a partir de una plantilla Cfx.re, luego implemente la salida de la construcci\u00f3n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Lua: la ruta directa del framework<\/h2>\n<p>Documentos Cfx.re <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/lua\/\" rel=\"nofollow noopener\" target=\"_blank\">CfxLua como un tiempo de ejecuci\u00f3n modificado de Lua 5.4<\/a>. Eso importa cuando comparas el c\u00f3digo FiveM con tutoriales antiguos de Lua: las caracter\u00edsticas del lenguaje y el comportamiento del tiempo de ejecuci\u00f3n deben verificarse con CfxLua, no inferirse del paquete del sistema operativo de un servidor.<\/p>\n<p>Lua suele ser la opci\u00f3n menos disruptiva cuando el framework y los recursos vecinos ya est\u00e1n escritos en Lua. Puedes mantener eventos, exportaciones y configuraci\u00f3n compartida en el mismo idioma y evitar agregar un paso de compilaci\u00f3n solo por estilo. Un peque\u00f1o manifiesto puede listar scripts de cliente, servidor y compartidos separados. Mant\u00e9n los secretos y las comprobaciones de autoridad solo del servidor fuera de los archivos del cliente, incluso cuando ambos lados usen Lua.<\/p>\n<p>La sintaxis corta facilita el escaneo de los manejadores de eventos, pero no reemplaza el dise\u00f1o de la interfaz. Documenta cada carga \u00fatil de evento, valida los valores en el servidor y evita tratar un evento de cliente como prueba de que el dinero, el inventario o los permisos son v\u00e1lidos.<\/p>\n<h2>JavaScript y TypeScript: saber qu\u00e9 lado se est\u00e1 ejecutando<\/h2>\n<p>El oficial <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/javascript\/\" rel=\"nofollow noopener\" target=\"_blank\">Gu\u00eda de tiempo de ejecuci\u00f3n de JavaScript<\/a> describe el soporte de ES2017 y una divisi\u00f3n cr\u00edtica cliente\/servidor. Los scripts de cliente se ejecutan en el tiempo de ejecuci\u00f3n del cliente de FiveM y no tienen APIs de navegador ni APIs de Node.js. Los scripts de servidor usan un tiempo de ejecuci\u00f3n de Node.js personalizado. La versi\u00f3n de servidor documentada por defecto es Node.js 16; un recurso puede optar por Node.js 22 con <code data-no-translation=\"\">node_version '22'<\/code> en <code data-no-translation=\"\">fxmanifest.lua<\/code>.<\/p>\n<p>No asumas que un paquete que funciona en un proyecto Node ordinario tambi\u00e9n funciona en un script de cliente FiveM. Coloca las dependencias de sistema de archivos, base de datos y npm del lado del servidor en el l\u00edmite del servidor. Para las definiciones de editor y TypeScript, Cfx.re publica los <code data-no-translation=\"\">@citizenfx\/client<\/code> y <code data-no-translation=\"\">@citizenfx\/server<\/code> paquetes. Mejoran la verificaci\u00f3n de tipos, pero no otorgan APIs que el tiempo de ejecuci\u00f3n seleccionado carece.<\/p>\n<p>FiveM tambi\u00e9n documenta las restricciones de afinidad de subprocesos para algunas llamadas nativas del lado del servidor. Cuando el c\u00f3digo as\u00edncrono de Node necesite volver al hilo principal del juego, siga la gu\u00eda de tiempo de ejecuci\u00f3n y use <code data-no-translation=\"\">setImmediate<\/code> donde sea necesario. Pruebe el JavaScript compilado que realmente implementa, incluidos los mapas de origen y el orden de inicio, en lugar de solo el c\u00f3digo fuente TypeScript.<\/p>\n<h2>C#: use la forma de proyecto compatible<\/h2>\n<p>El <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/csharp\/\" rel=\"nofollow noopener\" target=\"_blank\">Documentaci\u00f3n de tiempo de ejecuci\u00f3n de C#<\/a> proporciona plantillas de proyectos actuales y gu\u00eda de compilaci\u00f3n. Comience all\u00ed en lugar de copiar un dise\u00f1o de ensamblado antiguo de una aplicaci\u00f3n .NET no relacionada. Un recurso C# normalmente tiene un proyecto que hace referencia a los ensamblados CitizenFX compatibles, compila su c\u00f3digo y coloca los archivos resultantes donde el manifiesto puede cargarlos.<\/p>\n<p>C# puede ser una buena opci\u00f3n cuando el equipo ya utiliza tipos, herramientas y pr\u00e1cticas de prueba de .NET. La contrapartida es operativa: los colaboradores y la CI necesitan el SDK y el comando de compilaci\u00f3n correctos, y el artefacto implementado debe permanecer sincronizado con su origen. Registre la plantilla, el marco de destino y el proceso de lanzamiento en el repositorio para que una actualizaci\u00f3n del servidor sea reproducible.<\/p>\n<h2>El modelo compartido: manifiestos, nativos, eventos y exportaciones<\/h2>\n<p>La elecci\u00f3n del idioma no cambia el contrato del recurso. Cada recurso necesita un <code data-no-translation=\"\">fxmanifest.lua<\/code> que declara metadatos y los archivos a cargar. El c\u00f3digo del cliente se ejecuta para los jugadores conectados; el c\u00f3digo del servidor se ejecuta bajo FXServer. Los archivos compartidos se entregan a ambas partes, por lo que no deben contener credenciales ni decisiones de confianza solo del servidor.<\/p>\n<ul>\n<li><strong>Nativos<\/strong> expone funciones del juego y de la plataforma. Consulta la referencia nativa actual y si una funci\u00f3n nativa es del lado del cliente o del servidor.<\/li>\n<li><strong>Eventos<\/strong> mueve mensajes dentro o a trav\u00e9s del l\u00edmite cliente\/servidor. Trata la entrada de red como no confiable y val\u00eddala en el lado del servidor.<\/li>\n<li><strong>Exportaciones<\/strong> publica funciones para otros recursos. Mant\u00e9n documentados los nombres, par\u00e1metros, valores de retorno y dependencias de inicio.<\/li>\n<li><strong>Dependencias<\/strong> pertenecen al manifiesto o al orden de inicio del servidor cuando otro recurso debe estar disponible primero.<\/li>\n<\/ul>\n<p>Un servidor de lenguaje mixto es normal. El l\u00edmite estable es el evento o la exportaci\u00f3n documentados, no el lenguaje de implementaci\u00f3n detr\u00e1s de ellos. Esto hace posible reemplazar un recurso sin reescribir toda la pila.<\/p>\n<h2>C\u00f3mo elegir para un proyecto real<\/h2>\n<ol>\n<li><strong>Empieza con el framework.<\/strong> Si el servidor depende de un ESX, QBCore, Qbox o recurso independiente establecido, utiliza sus puntos de extensi\u00f3n y convenciones de lenguaje compatibles.<\/li>\n<li><strong>Lista las bibliotecas requeridas.<\/strong> Confirme que cada controlador de base de datos, puente UI y paquete sea compatible con el tiempo de ejecuci\u00f3n del cliente o servidor donde se ejecutar\u00e1.<\/li>\n<li><strong>Coincide con el equipo.<\/strong> Prefiera el idioma que los colaboradores puedan revisar, probar y mantener despu\u00e9s de que el autor original se vaya.<\/li>\n<li><strong>Defina la compilaci\u00f3n.<\/strong> Lua puede enviarse directamente; TypeScript y C# suelen necesitar una compilaci\u00f3n reproducible y un directorio de salida claro.<\/li>\n<li><strong>Prototipo del l\u00edmite.<\/strong> Pruebe una llamada nativa, un evento de red validado por el servidor, una exportaci\u00f3n y un reinicio de dependencia antes de construir la funci\u00f3n completa.<\/li>\n<\/ol>\n<h2>Lista de verificaci\u00f3n de verificaci\u00f3n m\u00ednima<\/h2>\n<ul>\n<li>Inicie el recurso en un servidor de prueba e inspeccione los registros del servidor y del cliente F8.<\/li>\n<li>Vuelva a conectar un cliente limpio y reinicie el recurso para exponer archivos faltantes o suposiciones de orden.<\/li>\n<li>Env\u00eda cargas \u00fatiles de eventos no v\u00e1lidas y no autorizadas y confirma que el servidor las rechaza.<\/li>\n<li>Verifica la versi\u00f3n de Node documentada o la salida de compilaci\u00f3n de .NET en el host de implementaci\u00f3n real.<\/li>\n<li>Fija las versiones de las dependencias y guarda una copia de reversi\u00f3n del \u00faltimo recurso que funcion\u00f3.<\/li>\n<\/ul>\n<p>No hay ninguna raz\u00f3n basada en la evidencia para coronar a uno de los tres lenguajes de codificaci\u00f3n FiveM como universalmente el m\u00e1s r\u00e1pido o el m\u00e1s popular para cada recurso. Selecciona Lua, JavaScript\/TypeScript o C# de los hechos de tiempo de ejecuci\u00f3n admitidos, el marco circundante y el costo de mantenimiento que tu equipo realmente puede asumir.<\/p>","protected":false},"excerpt":{"rendered":"<p>Compare los tiempos de ejecuci\u00f3n FiveM Lua, JavaScript y C# compatibles, sus l\u00edmites de cliente y servidor, herramientas, manifiestos, eventos y exportaciones.<\/p>","protected":false},"author":1,"featured_media":162273,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1899,2340],"tags":[3001],"class_list":["post-162272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-lua-scripting","tag-fivem-script"],"_links":{"self":[{"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/posts\/162272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/comments?post=162272"}],"version-history":[{"count":1,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/posts\/162272\/revisions"}],"predecessor-version":[{"id":212551,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/posts\/162272\/revisions\/212551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/media\/162273"}],"wp:attachment":[{"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/media?parent=162272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/categories?post=162272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemx.com\/es\/wp-json\/wp\/v2\/tags?post=162272"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}