Skip to content

Instantly share code, notes, and snippets.

@rpivo
Created May 20, 2021 22:55
Show Gist options
  • Save rpivo/8bf56eb851469cb3972e174261428b31 to your computer and use it in GitHub Desktop.
Save rpivo/8bf56eb851469cb3972e174261428b31 to your computer and use it in GitHub Desktop.
Adding a Clean Script in Node

Adding a Clean Script in Node

import fs from "fs";
import path from "path";

const cwd = process.cwd();

const assetsFolder = "assets";
const distFolder = "dist";
const seoFolder = "seo";
const srcFolder = "src";
const entryFile = "index.html";

/**
 * Copies a collection of files from the source folder to the distribution
 * folder.
 * @param { from, to } - the folder to copy from, and the folder to copy to
 * (both strings).
 * @param  {Array<string>} files - a collection of files (strings) to be copied.
 */
function copyFiles({ from, to }, ...files) {
  files.forEach((file) => {
    fs.copyFileSync(path.join(from, file), path.join(to, file));
  });
}

/**
 * Copies each file from a given folder to the output folder.
 */
function copyFolder({ from, to }, targetFolder) {
  const contents = fs.readdirSync(path.join(cwd, srcFolder, targetFolder));
  copyFiles({ from: path.join(from, targetFolder), to }, ...contents);
}

/**
 * Deletes the output folder and remakes it.
 */
function regenerateOutputFolder() {
  fs.rmSync(distFolder, { force: true, recursive: true });
  fs.mkdirSync(distFolder);
}

/**
 * Starts clean process and prints progress logs.
 */
function clean() {
  console.log(`cleaning ${distFolder}.\n`);
  regenerateOutputFolder();
  copyFiles({ from: srcFolder, to: distFolder }, entryFile);
  copyFolder({ from: srcFolder, to: distFolder }, assetsFolder);
  copyFolder({ from: srcFolder, to: distFolder }, seoFolder);
  console.log(`${distFolder} cleaned.\n`);
}

clean();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment