Promisified node.js file system utilities
David Wells
Posted on May 15, 2020
Originally published on davidwells.io
Node introduced the promisify
utilities in back in version 8.
Using promisify
you can use the node.js file system utilities with async/await
and promises.
There are a couple of bits missing from the core node.js filesystem.
Below are the promisified file system calls I use a bunch in projects.
I've added createDir
, fileExists
, and deleteDir
to smooth over some of the core fs
methods that can be a little awkward to work with.
/* ./utils/fs.js */
const fs = require('fs')
const mkdirp = require('mkdirp')
const rimraf = require('rimraf')
const { promisify } = require('util')
const fileExists = (s) => new Promise(r => fs.access(s, fs.F_OK, e => r(!e)))
module.exports = {
// Check if file exists
fileExists: fileExists,
// Read file
readFile: promisify(fs.readFile),
// Write file
writeFile: promisify(fs.writeFile),
// Recursively create directory
createDir: mkdirp,
// Read directory file names
readDir: promisify(fs.readdir),
// Recursively delete directory & contents
deleteDir: promisify(rimraf),
}
Install mkdirp
and rimraf
npm packages for deleteDir
& createDir
npm install mkdirp rimraf
Then you can use it in your project
const path = require('path')
const { fileExists, readFile } = require('./utils/fs')
async function doIt(filePath) {
const exists = await fileExists(filePath)
let contents
if (exists) {
contents = await readFile(filePath)
}
return contents
}
const file = path.resolve('foo-bar.json')
doIt(file).then((contents) => {
console.log('Yay 🎉', contents)
})
Hope this helps!
Let me know if you have other file system utilities you like to use in the comments below.
Posted on May 15, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.