Skip to content

Replacements for fs-extra

Node.js

Modern Node.js includes built-in fs and fs/promises APIs that cover what fs-extra historically provided. The table below maps fs-extra methods to Node.js APIs and highlights significant differences

fs-extranode:fsNotes
copy(src, dest[, options])fsPromises.cp(src, dest[, options])If src is a file and dest is an existing directory, fs-extra throws; fs.cp copies into the directory. filter must be sync.
copySync(src, dest[, options])fs.cpSync(src, dest[, options])
remove(path[, callback])fsPromises.rm(path[, options])Use force: true to match fs-extra’s "silently ignore missing path". Consider maxRetries/retryDelay.
removeSync(path)fs.rmSync(path[, options])
mkdirs(dir[, options][, callback]), mkdirp(...), ensureDir(...)fsPromises.mkdir(path[, options])Use { recursive: true }.
mkdirsSync(dir[, options]), mkdirpSync(...), ensureDirSync(...)fs.mkdirSync(path[, options])Use { recursive: true }.
pathExists(path)fsPromises.access(path[, mode])Return boolean (wrap resolve/reject).
pathExistsSync(path)fs.existsSync(path)
outputFile(file, data[, options])fsPromises.mkdir(path[, options]) + fsPromises.writeFile(file, data[, options])Ensure parent directory.
outputFileSync(file, data[, options])fs.mkdirSync(path[, options]) + fs.writeFileSync(file, data[, options])
readJson(file[, options])fsPromises.readFile(path[, options])Use JSON.parse; ensure 'utf8'. fs-extra’s throws:false is not built-in.
writeJson(file, obj[, options])fsPromises.writeFile(file, data[, options])Use JSON.stringify; EOL option not built-in.
outputJson(file, obj[, options])fsPromises.mkdir(path[, options]) + fsPromises.writeFile(file, data[, options])Ensure parent directory; EOL not built-in.
ensureFile(file) / createFile(file)fsPromises.mkdir(path[, options]) + fsPromises.writeFile(file, data[, options])Non-truncating create (e.g., { flag: 'a' }).
ensureFileSync(file) / createFileSync(file)fs.mkdirSync(path[, options]) + fs.writeFileSync(file, data[, options])
ensureLink(src, dst) / createLink(src, dst)fsPromises.mkdir(path[, options]) + fsPromises.link(existingPath, newPath)Same device only.
ensureLinkSync(src, dst) / createLinkSync(src, dst)fs.mkdirSync(path[, options]) + fs.linkSync(existingPath, newPath)
ensureSymlink(src, dst[, type]) / createSymlink(...)fsPromises.mkdir(path[, options]) + fsPromises.symlink(target, path[, type])
ensureSymlinkSync(src, dst[, type]) / createSymlinkSync(...)fs.mkdirSync(path[, options]) + fs.symlinkSync(target, path[, type])
emptyDir(dir) / emptydir(dir)fsPromises.rm(path[, options]) + fsPromises.mkdir(path[, options])Preserves dir inode vs rm+mkdir (inode changes).
move(src, dest[, options])fsPromises.rename(oldPath, newPath)Not cross-device; add cp + rm fallback. No overwrite option - handle existing dest.

Released under the MIT License. (0e1ad283)