Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

196
Views
Node.js: busque variables en archivos y cree objetos a partir de ellos

Realmente no sabía cómo explicar esto. Esencialmente, tengo una estructura de directorio:

 src/ modules/ clients/ i18n/ en-US.ts tasks/ i18n/ en-US.ts

Ahora cada uno de esos archivos .ts tiene el mismo aspecto:

 export default { "Key1": "The value", "Key2": "The value 2", }

Pero, por supuesto, los archivos tendrán diferentes nombres y valores clave.

Ahora, necesito precompilar todos estos archivos en un solo index.ts que se vea así:

 messages: { 'en-US': { "Key1": "....", .... } }

Por el momento, lo que tengo es realmente una mierda. Básicamente tengo estos archivos de idioma como archivos "txt" con el "contenido" del objeto

 'Key1': 'Some test',

y construyo el archivo index.ts escribiendo primero todo el código hasta ": {" donde deben ir los mensajes, luego leo esos archivos txt e ingreso su contenido, y finalmente cierro el objeto.

Realmente, quiero poder leer la exportación de estos archivos ts reales y concatenar el valor en una variable que luego escribo en el archivo index.ts.

es posible?

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Sí, es posible. Este tipo de lógica debería hacerlo. Realmente no lo he probado, pero seguirlo debería llevarte a lo que quieres.

 let messages = {} let module_folder_directory = "some_directory" fs .readdirSync(module_folder_directory) .forEach((module)=>{ fs .readdirSync(path.join(module_folder_directory, module, "i18n")) // Assuming there's only one file in the folder, you could just access the first element in the array. .forEach((file)=>{ messages[file] = require(path.join(module_folder_directory, module, "i18n", file)) }) })

Puede leer más sobre el sistema de archivos aquí .

about 4 years ago · Santiago Trujillo Report

0

La estructura de datos puede ser más compleja, pero aquí hay una versión simple de la importación de un archivo:

 import { basename } from 'node:path' async function buildMessages(file_list) { const messages = {} for (const file_path of file_list) { const file_label = basename(file_path, '.ts') // build specific if (!messages[file_label]) messages[file_label] = {} const file_messages = await import(file_path) Object.assign(messages[file_label], file_messages.default) } return messages }

El paso de precompilación es más fácil con deno o ts-node donde puede usar los nombres de archivo mecanografiados directamente. Ejecutarlo desde TS compilado depende de la configuración de compilación de TS, ya que las extensiones de archivo y las importaciones pueden variar con las opciones de tsconfig.

 const built_file_list = [ './a.ts', './b.ts', './c.ts' ] const messages = await buildMessages(built_file_list)

Esto también podría ejecutarse en node.js sin formato si la tarea "crear lista de archivos" creó un enlace simbólico o una copia de todos los archivos como x.mjs y puede asegurarse de que los archivos de idioma sigan siendo compatibles con JS ESM sin formato.

Luego construya código para tipos de datos simples a través de JSON:

 const code = `const messages = ${JSON.stringify(messages, undefined, 2))}` //>>> const messages = { "a": { "key": "aa", "key2": "ab" }, "b": { "key3": "ba", "key": "bcw" }, "c": { "key4": "ca", "key5": "cd" } }

Si el destino de index.ts es un entorno de nodo, puede escribir los datos de los mensajes en un archivo JSON e importarlos nuevamente a index.ts . El uso de una importación JSON requiere algunas travesuras de compilación de mecanografiado para configurarlo.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!