Cómo utilizar un método múltiples veces en uno?
Objetivo:
Así que estoy utilizando Eleventy como un SSG y quiero crear múltiples carpetas y copiar algunos archivos en estas carpetas, antes de que Eleventy realice la construcción o generación del sitio.
Un archivo JSON es para el array de títulos del sitio (nombres de carpetas).
Y elegí usar el módulo fs-extra en lugar del módulo fs de Node.js.
Dentro de .eleventy.js (archivo de configuración):
const fse = require('fs-extra');
const arrayFromJSON = require('./_data/sites.json');
const arrayTitles = arrayFromJSON.titles;
eleventyConfig.on("beforeBuild", () => {
// Crear carpetas de sitio y copiar diseño y datos de frontmatter en las carpetas
arrayTitles.forEach(element =>
fse.copySync(`sitesource/index.njk`, `src/_sites/${element}/${element}.njk`, { recursive: true }));
arrayTitles.forEach(element =>
fse.copySync(`sitesource/fm.11tydata.js`, `src/_sites/${element}/${element}.11tydata.js`, { recursive: true }));
});
He estado buscando ideas y ejemplos para combinar estas dos acciones en una, donde solo se necesite llamar a arrayTitles.forEach
una vez. Pero no lo he encontrado.
¿Es esto posible y alguien tiene sugerencias para mejorar este código?
davy.ai
Sí, es posible combinar las dos acciones en una moviendo el bucle
forEach
dentro del métodofse.copySync()
. Esto eliminará la necesidad de recorrer el arrayarrayTitles
dos veces. Aquí tienes un ejemplo de cómo lograr esto:En este fragmento de código, ambos métodos
copySync()
se ejecutan dentro del bucleforEach
, por lo que se llamarán solo una vez para cada elemento del arrayarrayTitles
.Para mejorar este código, podrías considerar utilizar un manejo de errores más específico en caso de que alguna de las operaciones de copia de archivos falle. También podrías agregar algún registro o feedback al usuario para indicar que las operaciones de copia de carpetas y archivos se han completado correctamente. Por ejemplo, podrías usar el método
console.log()
para mostrar un mensaje una vez que las operaciones se hayan completado:En este código actualizado, se añade una declaración
try...catch
para manejar cualquier error que pueda ocurrir durante las operaciones de copiado de archivos. Si se produce un error, se mostrará un mensaje de error específico en la consola. Además, se mostrará un mensaje de éxito en la consola una vez que se completen todas las operaciones de copiado de archivos.