ensureFile()
when used with Jest on Windows (#804, #805)process.umask()
call (#791)ensureDir*
to use a fork of https://github.com/sindresorhus/make-dir to make use of native recursive fs.mkdir
where possible (#619, #756)atime
for copy*
with preserveTimestamps
option (#633)The following changes, allthough technically breaking, will not affect the vast majority of users:
outputJson
now outputs objects as they were when the function was called, even if they are mutated later (#702, #768)null
as an options parameter to *Json*
methods (#745, #768)fs.writev
& fs.opendir
(#747)ensureFile
(#696, #744)universalify
dependency (#767)fs.realpath.native
in Node v9.2+ (#650, #682)graceful-fs
dependency (#700)graceful-fs
everywhere (#700)Maximum call stack size exceeded
error in util/stat
(#679)NOTE: Node.js v6 support is deprecated, and will be dropped in the next major release.
renameSync()
under the hood in moveSync()
copy*()
(#613, #618)move()
with case-insensitive file systemsfs.stat()
's bigint
option in copy*()
& move*()
where possible (#657)removeSync()
on Windows, in some cases, it would error out with ENOTEMPTY
(#646)mode
option for ensureDir*()
(#587)copy*()
handling of symlinks to properly detect symlinks that point to the same file. (#582)fs.lchmod()
(#596)engines
field to package.json
(#580)fs.promises
ExperimentalWarning
on Node v10.1.0 (#578)move
to use fs.rename
where possible (#549)filter
(#554)copy*
's behavior when preserveTimestamps
is false
has been OS-dependent since 5.0.0, but that's now explicitly noted in the docs (#563)copy*
& move*
(#541)copy*
(#568)Significant refactor of copy()
& copySync()
, including breaking changes. No changes to other functions in this release.
Huge thanks to @manidlou for doing most of the work on this release.
filter
option can no longer be a RegExp (must be a function). This was deprecated since fs-extra v1.0.0. #512copy()
's filter
option can now be a function that returns a Promise. #518copy()
& copySync()
now use fs.copyFile()
/fs.copyFileSync()
in environments that support it (currently Node 8.5.0+). Older Node versions still get the old implementation. #505dest
's parent if the filter
function aborts the copy()
operation. #517writeStream
not being closed if there was an error in copy()
. #516chmod
values in fs.remove()
#501TypeError
on systems that don't have some fs
operations like lchown
#520EOL
option to writeJson*
& outputJson*
(via upgrade to jsonfile v4)fs.copyFile()
in Node 8.5+.js
extension to main
field in package.json
for better tooling compatibility. #485ensureFile()
& ensureFileSync()
would do nothing if the path was a directory. Now, they error out for consistency with ensureDir()
. #465, #466, #470fs.read()
& fs.write()
now return objects. See the docs for details. #436, #449fs.move()
now errors out when destination is a subdirectory of source. #458rimraf
to fs.remove()
& fs.removeSync()
. #459fs.outputJSONSync()
working again; it was broken due to refactoring. #428Also clarified the docs in a few places.
move()
& moveSync()
when source and destination are the same, and source does not exist. #415pathExists()
, a replacement for the deprecated fs.exists
. pathExists
has a normal error-first callback signature. Also added pathExistsSync
, an alias to fs.existsSync
, for completeness. #406writeJson()
, writeJsonSync()
, outputJson()
, & outputJsonSync()
. This was undocumented. #402throws
option for readJsonSync()
; now does not throw filesystem errors when throws
is false
.writeJson()
, writeJsonSync()
, outputJson()
, & outputJsonSync()
now output minified JSON by default for consistency with JSON.stringify()
; set the spaces
option to 2
to override this new behavior. #402Buffer.allocUnsafe()
instead of new Buffer()
in environments that support it. #394removeSync()
silently failed on Windows in some cases. Now throws an EBUSY
error. #408ensureDir()
's callback being called twice in some cases. This bug may have also affected remove()
. See #392, #3935597bd
, this broke compatibility with Node.js versions v4+ but less than v4.5.0
.Buffer.alloc()
usage in moveSync()
.Thanks to Mani Maghsoudlou (@manidlou) & Jan Peer Stöcklmair (@JPeer264) for their extraordinary help with this release!
moveSync()
See #309, #381. (@manidlou)copy()
and copySync()
's filter
option now gets the destination path passed as the second parameter. #366 (@manidlou)Buffer.alloc()
instead of deprecated new Buffer()
in copySync()
. #380 (@manidlou)v0.12
. The Node foundation stopped officially supporting it
on Jan 1st, 2017.walk()
and walkSync()
. walkSync()
was only part of fs-extra
for a little
over two months. Use klaw instead of walk()
, in fact, walk()
was just
an alias to klaw. For walkSync()
use klaw-sync. See: #338, #339clobber
to overwrite
. This affects copy()
, copySync()
, and move()
. #330, #333docs/
. #340copySync()
like in copy()
. #324copy()
can fail. #326After five years of development, we finally have reach the 1.0.0 milestone! Big thanks goes to Ryan Zim for leading the charge on this release!
walkSync()
rimaf
globbing, wasn't used. #280copy()/copySync()
option filter
if it's a RegExp
. filter
should now be a function.rimraf
. This is temporary and was done because rimraf
depended upon the beefy glob
which fs-extra
does not use. #300utimesMillis()
#271copySync()
failed if user didn't own file. #199, #301ensureLink()/ensureSymlink()
. Node v0.12 is still supported but will be dropped in the near future as well.createOutputStream()
. Use https://www.npmjs.com/package/create-output-stream. See: #192mkdirs()/mkdirsSync()
check for invalid win32 path chars. See: #209, #237mkdirs()/mkdirsSync()
if drive not mounted, error. See: #93dereference
option to copySync()
. #235copy()
if source and dest are the same. #230emptyDir()
does not have a callback: #229copy()
with two arguments (w/o callback) was broken. See: #215copySync()
made preserveTimestamps
default consistent with copy()
which is false
. See: #208copy()
hangup in copying blockDevice / characterDevice / /dev/null
. See: #193outputJson{Sync}()
spacing adherence to fs.spaces
copySync()
when clogger=true
and the destination is read only. See: #190walk()
function into its own module klaw
.walk()
delete()
and deleteSync()
. See: #171move()
when moving across devices. #170ensureSymlink()
and ensureLink()
should not throw errors if link exists. #169ensureLink{Sync}()
and ensureSymlink{Sync}()
. See: #165hasMillisResSync()
on module load. See: #149.
Fixes regression that was introduced in 0.21.0
.copy()
. See: #54copy()
and copySync()
. See: #141graceful-fs@3.x
to 4.x
. This brings in features from amazing-graceful-fs
(much cleaner code / less hacks)jsonfile
aliases with File
in the name, they weren't documented and probably weren't in use e.g.
this package had both fs.readJsonFile
and fs.readJson
that were aliases to each other, now use fs.readJson
.jsonfile@2.1.0
, can now pass JSON revivers/replacers to readJson()
, writeJson()
, outputJson()
fs.copy()
had support for Node v0.8, dropped supportEEXIST
when clobbering on some Linux systems. #134F_OK
(#120)move()
a bit. https://github.com/jprichardson/node-fs-extra/commit/92838980f25dc2ee4ec46b43ee14d3c4a1d30c1bemptyDir()
and emptyDirSync()
copySync
added clobber
option (before always would clobber, now if clobber
is false
it throws an error if the destination exists).
Only works with files at the moment.createOutputStream()
added. See: #118fs.move
when clobber
is true
and destination is a directory, it should clobber. #114fs.mkdirs
fix infinite loop on Windows. See: See https://github.com/substack/node-mkdirp/pull/74 and https://github.com/substack/node-mkdirp/issues/66fs.copy
for Node v0.8 (support is temporary and will be removed in the near future)setImmediate
is not available, fall back to process.nextTick
fs.move()
into itself. Closes #104fs.move()
moving directory across device. Closes #108fs.copy()
bug. Closes #98ncp
, imported code inio.js
graceful-fs
is now a dependencycopy
/copySync
from fs.copy(src, dest, [filters], callback)
to fs.copy(src, dest, [options], callback)
#100touch
and touchSync
methods (they didn't handle permissions like UNIX touch)"ncp": "^0.6.0"
to "ncp": "^1.0.1"
mkdirp
=> minimist
and mkdirp
are no longer dependences, should now appease people who wanted mkdirp
to be --use_strict
safe. See #59copySync()
#85copySync()
preserve file permissions #80"ncp": "^0.5.1"
to "ncp": "^0.6.0"
jsonfile": "^1.2.0"
to jsonfile": "^2.0.0"
=> on write, json files now have \n
at end. Also adds options.throws
to readJsonSync()
see https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options for more details."jsonfile": "~1.1.0"
to "jsonfile": "^1.2.0"
, bumped minor because of jsonfile
dep change
from ~
to ^
. #670.8.x
support, 0.9.0
was published moments ago and should have been done therencp
from ~0.4.2
to ^0.5.1
, #58rimraf
from ~2.2.6
to ^2.2.8
mkdirp
from 0.3.x
to ^0.5.0
ensureFile()
, ensureFileSync()
ensureDir()
, ensureDirSync()
#31move()
method. From: https://github.com/andrewrk/node-mvfilter
implemented on copy()
and copySync()
. (Srirangan / #36)copySync()
implemented (Srirangan / #33)jsonfile
version 1.1.0
which gives options
params for the JSON methods. Closes #32copy()
now works if destination directory does not exist. Closes #29homepage
field in package.json to remove NPM warning4
to 2
to follow Node conventionsjsonfile
deprimraf
depncp
and rimraf
.graceful-fs
support. Closes #17readTextFile
.readJSONFile
to readJSON
and readJson
, same with write.jsonfile
from 4 to 2.testutil
deps for tests.touch()
to createFile()
outputFile()
and outputFileSync()
readTextFile()
and readTextFileSync()
.touch()
and touchSync()
methods.mkdir
to mkdirs
/mkdirp
.rimraf
dep.readJSONFile
.deleteSync()
didn't exist.remove()
/delete()
that wouldn't execute the function if a callback wasn't passed.copyFile()
to copy()
. copy()
can now copy directories (recursively) too.rmrf()
to remove()
.remove()
aliased with delete()
.mkdirp
capabilities. Named: mkdir()
. Hides Node.js native mkdir()
.fs
module with new functions, I now copy over the native methods to a new object and export that instead.