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.spacescopySync() 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.nextTickfs.move() into itself. Closes #104fs.move() moving directory across device. Closes #108fs.copy() bug. Closes #98ncp, imported code inio.jsgraceful-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.8mkdirp from 0.3.x to ^0.5.0ensureFile(), 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.