Small module to mirror a folder to another folder.
Supports watch mode as well where it will continuously watch the src folder and mirror new entries as they are created/removed.
npm install mirror-folder
var mirror = require('mirror-folder')
mirror('/Users/maf/cool-stuff', '/Users/maf/cool-stuff-mirror', function (err) {
if (err) throw err
console.log('Folder was mirrored')
})
Mirror src
to dst
. Returns a progress event emitter.
Options include:
{
watch: false, // keep watching the src and mirror new entries, can also be a custom watch function
dereference: false, // dereference any symlinks
equals: fun, // optional function to determine if two entries are the same, see below
ignore: null, // optional async function to ignore file paths on src or dest
dryRun: false, // emit all events but don't write/del files,
keepExisting: false, // whether to delete extra files in the destination that are not present in the source
skipSpecial: true // skip any files that are not regular files,
ensureParents: false // ensure that all parent directories exist before creating children.
}
The equals function looks like this:
function equals (src, dst, cb) {
console.log('src.name', src.name)
console.log('src.stat', src.stat)
console.log('dst.name', dst.name)
console.log('dst.stat', dst.stat)
cb(null, true) // callback with true if they are the same or false if not
}
Per default the equals function will check if mtime is larger on the src entry or if the size is different
The ignore function looks like this:
function ignore (file, cb) {
// ignore any files with secret in them
if (file.indexOf('secret') > -1) return process.nextTick(cb, null, true)
return process.nextTick(cb, null, false)
}
If you want to use a custom watch function on the src fs, the watch
option should take the form:
var unwatch = function watch (path, onwatch) { ... }
If you are using a custom fs module (like graceful-fs) you can pass that in
with the src
or dst
like this:
mirror({name: '/Users/maf/cool-stuff', fs: customFs}, {name: '/Users/maf/cool-stuff-mirror', fs: anotherFs})
Emitted when file/dir added to pending queue.
Array of items pending to be processed.
Emitted when a file/folder is copied from the src to the dst folder.
Emitted when a file chunk is read from the src.
Emitted at the end of a write stream (files only).
Emitted when a file/folder is deleted from the dst folder.
Emitted when a file/folder is ignored (either src or dst).
Emitted when a file/folder is skipped. Either src file already is equal
to dst file or file does not exist in either place.
Emitted when the mirror ends (not emitted in watch mode). The mirror callback is called when this event is emitted as well
Emitted when a critical error happens. If you pass a mirror callback you don't need to listen for this.
Stop mirroring files. If using watch mode, close the file watcher.
MIT