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.
Top comments (0)