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

grunt-sync

v0.8.2

Published

Task to synchronize two directories. Similar to grunt-copy but updates only files that have been changed.

Downloads

100,785

Readme

Grunt-sync

A grunt task to keep directories in sync. It is very similar to grunt-contrib-copy but tries to copy only those files that has actually changed.

Deprecation notice

This package is not actively developed any more.

Usage

npm install grunt-sync --save

Within your grunt file:

grunt.initConfig({
  sync: {
    main: {
      files: [{
        cwd: 'src',
        src: [
          '**', /* Include everything */
          '!**/*.txt' /* but exclude txt files */
        ],
        dest: 'bin',
      }],
      pretend: true, // Don't do any IO. Before you run the task with `updateAndDelete` PLEASE MAKE SURE it doesn't remove too much.
      verbose: true // Display log messages when copying files
    }
  }
});

grunt.loadNpmTasks('grunt-sync');
grunt.registerTask('default', 'sync');

More examples

sync: {
  main: {
    files: [
      {src: ['path/**'], dest: 'dest/'}, // includes files in path and its subdirs
      {cwd: 'path/', src: ['**/*.js', '**/*.css'], dest: 'dest/'}, // makes all src relative to cwd
    ],
    verbose: true, // Default: false
    pretend: true, // Don't do any disk operations - just write log. Default: false
    failOnError: true, // Fail the task when copying is not possible. Default: false
    ignoreInDest: "**/*.js", // Never remove js files from destination. Default: none
    updateAndDelete: true, // Remove all files from dest that are not found in src. Default: false
    compareUsing: "md5" // compares via md5 hash of file contents, instead of file modification time. Default: "mtime"

  }
}

Installation

npm install grunt-sync --save

How it works?

In the first phase the plugin compares modification times of files in src and dest. It only copies files with newer modification time. Second phase deletes files that exists in dest but have not been found in src.

Details:

  1. [1st phase] Read modification time of all files in src.
  2. [1] Overwrite destination if modification time is newer or destination is directory not file.
  3. [2nd phase]* Get a list of the files in dest and calculate difference between destination and source.
  4. [2]* Delete all files (and directories) that have been found in dest but are not found src excluding ignored files.

*second phase only occurs if updateAndDelete is set to true (whitch is set to false by default)

Changelog

  • 0.7.0 - Pass down grunt-copy options
  • 0.6.2 - Bumped major versions of important dependencies
  • 0.5.0 - Synchronous removal of directories (to avoid race conditions)
  • 0.4.0 - Adding better patterns support for ignoreInDest
  • 0.3.0 - Comparison using md5 hash of file contents or modification time
  • 0.2.4 - failOnError option
  • 0.2.3 - Fixed issue with files defined as array when using updateAndDelete.
  • 0.2.2 - Fixed issue with updateAndDelete when source patterns matches only files.
  • 0.2.1 - Fixed grunt Compact Format.
  • 0.2.0 - Default configuration will not remove any files any more. You have to specify updateAndDelete option to remove any files from destination.
  • 0.1.2 - Deleting all files in destination on Windows solved.
  • 0.1.1 - Fixed issue with trailing slash in destination.
  • 0.1.0 - Files missing that are not in src are deleted from dest (unless you specify updateOnly)

Migration 0.1.x -> 0.2.x

In version 0.2 you have to explicitly specify that you want the plugin to remove files from destination. See updateAndDelete option and run with pretend:true first to make sure that it doesn't remove any crucial files. You can tune what files should be left untouched with ignoreInDest property.

If you have updateOnly:true in your 0.1 config you can remove this option. For those who used updateOnly:false you have to include updateAndDelete:true in 0.2 config to keep the same behavior.

Contributors

TODO

  • Research if it's possible to have better integration with grunt-contrib-watch - update only changed files instead of scanning everything.
  • Some tests for common problems
  • Some tests to assure performance
  • Rewrite updateAndDelete in more elegant way (maybe use patterns from source?)