npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mirror-folder

v3.1.0

Published

Small module to mirror a folder to another folder. Supports live mode as well.

Downloads

980

Readme

mirror-folder

npm travis

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

Usage

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')
})

API

var progress = mirror(src, dst, [options], [callback])

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})

progress.on('pending', {name, live})

Emitted when file/dir added to pending queue.

progress.pending

Array of items pending to be processed.

progress.on('put', src, dst)

Emitted when a file/folder is copied from the src to the dst folder.

progress.on('put-data', data)

Emitted when a file chunk is read from the src.

progress.on('put-end', src, dst)

Emitted at the end of a write stream (files only).

progress.on('del', dst)

Emitted when a file/folder is deleted from the dst folder.

progress.on('ignore', src, dst)

Emitted when a file/folder is ignored (either src or dst).

progress.on('skip', src, 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.

progress.on('end')

Emitted when the mirror ends (not emitted in watch mode). The mirror callback is called when this event is emitted as well

progress.on('error', err)

Emitted when a critical error happens. If you pass a mirror callback you don't need to listen for this.

progress.destroy()

Stop mirroring files. If using watch mode, close the file watcher.

License

MIT