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.
npm install grunt-sync --saveWithin 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');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,
pretend: true, // Don't do any disk operations - just write log
ignoreInDest: "**/*.js", // Never remove js files from destination
updateAndDelete: true // Remove all files from dest that are not found in src
}
}npm install grunt-sync --save
- 0.2.2 - Fixed issue with
updateAndDeletewhen 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
updateAndDeleteoption 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
srcare deleted fromdest(unless you specifyupdateOnly)
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.
- 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
updateAndDeletein more elegant way (maybe use patterns from source?)