fs-extra
adds some file system methods that previously were not included in the native fs
module and added Promise
support to the fs
methods.
Many of the fs-extra modules have since been implemented natively by Node.
To use the promise-based APIs:
import * as fs from 'node:fs/promises';
To use the callback and sync APIs:
import * as fs from 'node:fs';
fs-extra | node:fs | Notes |
---|---|---|
copySync(src, dest[, options]) |
fs.copyFileSync(src, dest[, mode]) |
|
mkdirs(dir[,options][,callback]) , mkdirp(dir[,options][,callback]) , ensureDir(dir[,options][,callback]) |
fs.mkdir(dir, { recursive: true }, callback) |
ensureDir and mkdirp are aliases of mkdirs |
mkdirpSync(dir[,options]) , mkdirsSync(dir[,options]) , ensureDirSync(dir[,options]) |
fs.mkdirSync(dir, { recursive: true }) |
ensureDirSync and mkdirpSync are aliases of mkdirsSync |
remove(path[,callback]) |
fs.rm(path, { recursive: true, force: true }, callback) |
|
removeSync(dir) |
fs.rmSync(dir, { recursive: true, force: true }) |
|
move(src, dest, { overwrite: true }, callback) |
fs.rename(source, destination) |
|
moveSync(source, destination, { overwrite: true }) |
fs.renameSync(source, destination) |
These are not strictly equivalent. The move methods in fs-extra act like the mv command and they will work across devices also. The rename methods in fs work like the rename system call and will not work across devices. Having Node’s rename methods work across devices is currently marked as a "won't fix." Also, the overwrite: true behaviour is the default/only behaviour in the standard library. |
copy(source, destination, callback) |
fs.cp(source, destination, callback) |
|
pathExistsSync(file) |
fs.existsSync(path) |
For all other methods, a combination of fs methods may be needed rather than there being a one-to-one replacement. See the docs here