I love writing CLI scripts using JavaScript (mostly with deno, zx, or plain node.js).
Here's something I add to almost all my scripts: a tiny copy-pasteable way to color the output of success and failure messages without adding external libraries.
With a green ✔
and a red x
character:
console.success = (...args) => console.log("\x1b[32m✔\x1b[0m", ...args);
console.failure = (...args) => console.error("\x1b[31mx\x1b[0m", ...args);
console.success("Files copied successfully");
console.failure("Unable to delete the 'system32' directory");
console.success = (...args) => console.log("\x1b[32m✔\x1b[0m", ...args);
console.failure = (...args) => console.error("\x1b[31mx\x1b[0m", ...args);
console.success("Files copied successfully");
console.failure("Unable to delete the 'system32' directory");
With the green success
and a red failure
prefix:
console.success = (...args) => console.log("\x1b[32msuccess\x1b[0m", ...args);
console.failure = (...args) => console.error("\x1b[31mfailure\x1b[0m", ...args);
console.success("Files copied successfully");
console.failure("Unable to delete the 'system32' directory");
console.success = (...args) => console.log("\x1b[32msuccess\x1b[0m", ...args);
console.failure = (...args) => console.error("\x1b[31mfailure\x1b[0m", ...args);
console.success("Files copied successfully");
console.failure("Unable to delete the 'system32' directory");
And that's it — no need for chalk
and friends.
By the way, generally I don't promote extending global APIs such as console
. But for tiny scripts, it's too handy: just copy-paste these two lines at the top of your file, and you're set.
If you really can't stand overriding global variables, you can use composition instead:
const logger = {
...console,
success: (...args) => console.log("\x1b[32msuccess\x1b[0m", ...args),
failure: (...args) => console.error("\x1b[31mfailure\x1b[0m", ...args),
};
logger.success("Files copied successfully");
logger.failure("Unable to delete the 'system32' directory");
const logger = {
...console,
success: (...args) => console.log("\x1b[32msuccess\x1b[0m", ...args),
failure: (...args) => console.error("\x1b[31mfailure\x1b[0m", ...args),
};
logger.success("Files copied successfully");
logger.failure("Unable to delete the 'system32' directory");
For more details around the color escaping sequences, check out "How to change node.js's console font color?" on StackOverflow.