phpcomposer-phppackagist

Copy files from package to project root directory using composer


I'm writing a package for Packagist and I'm facing a problem with Composer. I need to copy a file from my package to the project root after install, but nothing is happening after the package installation.

After reading Composer documentation, I found that I should put a script inside the event post-install-cmd, inside the script section into composer.json file.

So, I added this to my package composer.json file

    "scripts": {
        "post-install-cmd": [
            "php -r \"copy('vendor/myvendor/mypackage/myfile', 'myfile');\""
        ]
    }

To install the package I'm doing

$ composer require myvendor/mypackage --dev

After the package installation everything seems fine, but the file is not being copied and no error is shown.


Solution

  • See https://getcomposer.org/doc/articles/scripts.md for the documentation of scripts. The most relevant part is:

    Note: Only scripts defined in the root package's composer.json are executed. If a dependency of the root package specifies its own scripts, Composer does not execute those additional scripts.

    So, you cannot define any scripts in your module. There is a bug report about that, but the maintainer of composer is not a friend of executing the scripts of dependencies