Skip to content

Skywire/CopyFile

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Latest Stable Version Total Downloads

Composer copy file

Composer script copying your files after install. Supports copying of entire directories, individual files and complex nested directories.

For example copy fonts:

{
    "require":{
        "twbs/bootstrap": "~3.3",
        "slowprog/composer-copy-file": "~0.3"
    },
    "scripts": {
        "post-install-cmd": [
            "SlowProg\\CopyFile\\ScriptHandler::copy"
        ],
        "post-update-cmd": [
            "SlowProg\\CopyFile\\ScriptHandler::copy"
        ]
    },
    "extra": {
        "copy-file": {
            "vendor/twbs/bootstrap/fonts/": "web/fonts/"
        }
    }
}

In a development you may use -dev suffix. For example copy non-minified in development and minified in production:

{
    "require":{
        "twbs/bootstrap": "~3.3",
        "slowprog/composer-copy-file": "~0.3"
    },
    "scripts": {
        "post-install-cmd": [
            "SlowProg\\CopyFile\\ScriptHandler::copy"
        ],
        "post-update-cmd": [
            "SlowProg\\CopyFile\\ScriptHandler::copy"
        ]
    },
    "extra": {
        "copy-file": {
            "vendor/twbs/bootstrap/dist/js/bootstrap.min.js": "web/js/bootstrap.js"
        },
        "copy-file-dev": {
            "vendor/twbs/bootstrap/dist/js/bootstrap.js": "web/js/bootstrap.js"
        }
    }
}

Use cases

You need to be careful when using a last slash. The file-destination is different from the directory-destination with the slash.

If in destination directory already exists copy of file, then it will be override. To overwrite only older files append ? in end of destination path.

Source directory hierarchy:

dir/
    subdir/
        file1.txt
        file2.txt
  1. Dir-to-dir:

    {
        "extra": {
            "copy-file": {
                "dir/subdir/": "web/other/"
            }
        }
    }
    

    Result:

    web/
        other/
            file1.txt
            file2.txt
    
  2. File-to-dir:

    {
        "extra": {
            "copy-file": {
                "dir/subdir/file1.txt": "web/other/",
                "dir/subdir/file2.txt": "web/other/file2.txt/"
            }
        }
    }
    

    Result:

    web/
        other/
            file1.txt
            file2.txt/
                file2.txt
    
  3. File-to-file:

    {
        "extra": {
            "copy-file": {
                "dir/subdir/file1.txt": "web/other/file1.txt",
                "dir/subdir/file2.txt": "web/other/file_rename.txt"
            }
        }
    }
    

    Result:

    web/
        other/
            file1.txt
            file_rename.txt
    
  4. Override only older files:

    {
        "extra": {
            "copy-file": {
                "dir/subdir/": "web/other/?"
            }
        }
    }
    

    Preset:

    web/
        other/
            file1.txt - Recently modified
            file2.txt - Old rotten file
    

    Result:

    web/
        other/
            file1.txt - Not changed
            file2.txt - Replaced
    
  5. Filter source files by regexp pattern

    {
        "extra": {
            "copy-file": {
                "dir/subdir#1\.\w{3}$": "web/other/"
            }
        }
    }
    

    Result:

    web/
        other/
            file1.txt
    
  6. Do not overwrite existing files

    {
        "extra": {
            "copy-file": {
                "dir/subdir/": "web/other/!"
            }
        }
    }
    

    Preset:

    web/
        other/
            file1.txt - Recently modified
            file2.txt - Existing File
    

    Result:

    web/
        other/
            file1.txt - Not changed
            file2.txt - Not changed
    

About

Composer script copying your files after install

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%