grunt-sync v0.8.2
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:
- 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 foundsrc
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 fromdest
(unless you specifyupdateOnly
)
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
- Michael Mifsud (xzyfer)
- Erwan Jegouzo (erwanjegouzo)
- Janek Lasocki-Biczysko (janeklb)
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?)
4 years ago
5 years ago
6 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago