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: [
'**',
'!**/*.txt'
],
dest: 'bin',
}],
pretend: true,
verbose: true
}
}
});
grunt.loadNpmTasks('grunt-sync');
grunt.registerTask('default', 'sync');
More examples
sync: {
main: {
files: [
{src: ['path/**'], dest: 'dest/'},
{cwd: 'path/', src: ['**/*.js', '**/*.css'], dest: 'dest/'},
],
verbose: true,
pretend: true,
failOnError: true,
ignoreInDest: "**/*.js",
updateAndDelete: true,
compareUsing: "md5"
}
}
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:
- [1st phase] Read modification time of all files in
src
. - [1] Overwrite destination if modification time is newer or destination is directory not file.
- [2nd phase]* Get a list of the files in
dest
and calculate difference between destination and source. - [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?)