This composer plugin removes unnecessary development files and directories from vendor directory

Overview

Composer Vendor Cleaner Packagist

This composer plugin removes unnecessary development files and directories from vendor directory.

Installation

Local installation to project:

composer require liborm85/composer-vendor-cleaner

Global installation:

composer global require liborm85/composer-vendor-cleaner

Requirements

  • PHP 5.6.0+

Configuration

Development files and directories to remove can be defined in composer.json file in extra data attribute per new key dev-files. Glob pattern syntax is fully supported.

Example:

"extra": {
    "dev-files": {
        "/": [                  // means: find in all library packages directories and bin directory
            "tests/",           // means: tests directory whatever
            "docs/",
            ".travis.yml"       // means: .travis.yml file whatever
        ],
        "*/*": [                // means: find in all library packages directories, but NOT in bin directory
            "*.sh"
        ],
        "bin": [                // means: find in composer bin directory
            "*.bat"
        ],
        "twig/twig": [          // means: find only in twig/twig package directory
            "doc/",
            "/drupal_test.sh"   // means: only file in root directory of twig/twig package
        ],
        "symfony/*": [          // means: find in all symfony packages
            "Tests/"
        ],
        "other/package": [
            "/src/**/*.md"      // means: find whatever all md files in src directory, eg.: /src/dir1/test.md, /src/dir1/dir2/readme.md
        ],
        "example/package": [    // means: remove all files and directories in language directory without cs.php file
            "languages/*",
            "!languages/cs.php" // means: exclude cs.php file from remove
        ]
    }
}

For additional configuration can be used config attribute.

  • match-case (default: true) - Match case of name files and directories.
  • remove-empty-dirs (default: true) - Removes empty directories.
  • no-dev-only (default: false) - If is set true start the cleanup only if the composer command is run with --no-dev.

Example:

"config": {
    "dev-files": {
        "match-case": false,
        "remove-empty-dirs": false
    }
}

Why a new plugin?

Some composer packages contain files and directories that do not belong to production servers, but composer does not solve this.

Exists a lot of plugins for composer trying to solve this issue, they don't have advanced patterns to filtering or they are not user definable. Or some have no configuration and it works automatically and delete almost everything and then the package does not work.

That's why I created a new one that allows advanced filtering by glob patterns.

If you miss a feature or find bug, please, create an issue.

License

MIT

Comments
  • Folders are removed, files are not

    Folders are removed, files are not

    Hi,

    first of all: thanks for sharing your composer package!

    I see that folders are removed correctly. Also folders can be excluded. But file paths are not handled, yet.

    See the dev-files section from my composer.json file:

            "dev-files": {
                "/": [
                    "twig/twig/src/test/integrationtestcase.php",
                    "composer/semver/src/versionparser.php",
                    "consolidation/output-formatters/src/formatters/stringformatter.php",
                    "consolidation/output-formatters/src/transformations/tabletransformation.php",
                    "consolidation/output-formatters/src/transformations/wrap/columnwidths.php",
                    "symfony/filesystem/tests/",
                    "symfony/http-client-contracts/test/",
                    "twig/twig/src/test/integrationtestcase.php",
                    "demos/",
                    "demo/",
                    "tests/",
                    "testing/",
                    "testing/",
                    "consolidation/",
                    "doctrine/cache/",
                    "drupal/coder/",
                    "drush/drush/",
                    "examples/",
                    "!/modules/lightning_core/",
                    "composer/semver/src/versionparser.php",
                    "consolidation/output-formatters/src/formatters/stringformatter.php",
                    "consolidation/output-formatters/src/transformations/tabletransformation.php",
                    "consolidation/output-formatters/src/transformations/wrap/columnwidths.php",
                    "symfony/filesystem/tests/filesystemtest.php",
                    "symfony/filesystem/tests/filesystemtestcase.php",
                    "symfony/filesystem/tests/lockhandlertest.php",
                    "symfony/http-client-contracts/test/fixtures/web/index.php"
                ]
            },
            "config": {
              "bin-dir": "bin/",
              "sort-packages": true,
              "dev-files": {
                "no-dev-only": true
              }
          },
    

    None of the specified file paths like

    symfony/http-client-contracts/test/fixtures/web/index.php

    do remove any files.

    waiting for information support 
    opened by jepster 5
  • How to switch back to the dev-dependencies in your dev-workflow?

    How to switch back to the dev-dependencies in your dev-workflow?

    Hi,

    currently it seems, that I must always execute a "composer update" command for getting back to my dev-dependencies. Let's say you are in the dev-phase. How do you get your dev-dependencies? It get get quite annoying, if you must always update all of your dependencies. Because you can stumble into issues with new versions quite often.

    It should not be necessary to run a "composer update" command to get back to your dev dependencies. Do you recommend to work with an additional composer.lock file?

    waiting for information support 
    opened by jepster 4
  • “[RuntimeException] Directory name must not be empty.“ while iterating directories

    “[RuntimeException] Directory name must not be empty.“ while iterating directories

    Hi!

    I'm testing out your plugin to clean up the vendor directory of a Drupal 8 installation, but when the plugin is enabled I encounter an exception.

    I have required the plugin and configured it thus to try it out:

    "dev-files": { "vendor/": [ "tests/", "docs/", ".travis.yml", "doc/" ] }

    Now when I no-dev-install my dependencies, eventually I get:

    [RuntimeException] Directory name must not be empty.

    With the following exception trace:

    Exception trace:
     () at /Users/marc/workspace/drupal8.marcmachttheater.de/vendor/liborm85/composer-vendor-cleaner/src/Directory.php:57
     RecursiveDirectoryIterator->__construct() at /Users/marc/workspace/drupal8.marcmachttheater.de/vendor/liborm85/composer-vendor-cleaner/src/Directory.php:57
     Liborm85\ComposerVendorCleaner\Directory->getDirectories() at /Users/marc/workspace/drupal8.marcmachttheater.de/vendor/liborm85/composer-vendor-cleaner/src/Cleaner.php:150
     Liborm85\ComposerVendorCleaner\Cleaner->removeEmptyDirectories() at /Users/marc/workspace/drupal8.marcmachttheater.de/vendor/liborm85/composer-vendor-cleaner/src/Cleaner.php:97
     Liborm85\ComposerVendorCleaner\Cleaner->cleanupPackages() at /Users/marc/workspace/drupal8.marcmachttheater.de/vendor/liborm85/composer-vendor-cleaner/src/Plugin.php:147
     Liborm85\ComposerVendorCleaner\Plugin->cleanup() at n/a:n/a
     call_user_func() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:164
     Composer\EventDispatcher\EventDispatcher->doDispatch() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:96
     Composer\EventDispatcher\EventDispatcher->dispatchScript() at phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php:112
     Composer\Autoload\AutoloadGenerator->dump() at phar:///usr/local/bin/composer/src/Composer/Installer.php:307
     Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/InstallCommand.php:122
     Composer\Command\InstallCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:245
     Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:835
     Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:185
     Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:281
     Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:117
     Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:113
     Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:61
     require() at /usr/local/bin/composer:24
    

    Not sure, what the right approach would be here. Have the directory iterator skip empty paths would be the most obvious solution, but that's just working around the symptom, not really addressing the cause…?

    bug 
    opened by marcoliverteschke 4
  • "dev-files": "composer.dev-files.json" and options

    I want to use external files for the lists but also set the match-case or remote-empty-dirs options.

    How do i mix "dev-files": "composer.dev-files.json" and "config": { "dev-files": { "match-case": false, "remove-empty-dirs": false } }

    support 
    opened by glensc 3
  • [Feature request] Only clean on --no-dev install

    [Feature request] Only clean on --no-dev install

    Hi,

    I'd like to suggest an extension of the plugin. Currently the plugin is executed after every package installation. But when I'm developing, I might want to look at a package's tests for reference. So I'd suggest the following:

    1. Add a boolean flag to the plugin config in composer.json, something like "skip-during-dev" or "no-dev-only"
    2. If that flag is present and set to true, start the cleanup task only if the composer command is run with --no-dev
    feature request 
    opened by marcoliverteschke 3
Releases(1.7.0)
Owner
Libor M.
Libor M.
Compares two directories and removes the duplicate files from the second directory.

How does the HRZ Duplicate Refiner work? 1- Compares two directories : patternDir: the directory used as the pattern & does not change. victimDir: A d

Hamidreza Zolfaghar 2 May 6, 2022
A composer plugin, to install differenty types of composer packages in custom directories outside the default composer default installation path which is in the vendor folder.

composer-custom-directory-installer A composer plugin, to install differenty types of composer packages in custom directories outside the default comp

Mina Nabil Sami 136 Dec 30, 2022
This plugin help us to remove the unused file or directories in vendor

Composer Ignore Plugin This plugin help us to remove the unused file or directories in vendor. Installation Both global or local install can work well

__FresHmaN 21 Oct 21, 2021
Composer plugin that wraps all composer vendor packages inside your own namespace. Intended for WordPress plugins.

Imposter Plugin Composer plugin that wraps all composer vendor packages inside your own namespace. Intended for WordPress plugins. Built with ♥ by Typ

Typist Tech 127 Dec 17, 2022
Integrates the ClassicPress Plugin Directory and any plugin stored in GitHub (tagged with classicpress-plugin) in the ClassicPress Admin

ClassicPress Plugin Directory Adds a new screen in a ClassicPress Install where you can browse, install, activate, deactivate, update, delete and pagi

TukuToi 3 Dec 27, 2022
The Drupal Vendor Hardening Composer Plugin

The Drupal Vendor Hardening Composer Plugin

Drupal 13 Oct 4, 2022
Directory for storing files from PHP and Logic classes

Curso Logica e PHP (C4) ✔️ Diretório para guardar os arquivos das aulas de PHP e lógica Seção 1 - Introdução Seção 2 - Lógica com VisualG e Nocões de

Bruno Henrique 1 Jan 28, 2022
An Alfred 4 workflow for quickly opening directories in Visual Studio Code

Alfred Workflow - Open in Visual Studio Code An Alfred 4 workflow opening files or folders with Visual Studio Code. Note: Alfred Powerpack is required

Daan Hage 2 Jun 27, 2022
Ied plugin composer - Inspired Plugin Composer: Create, publish and edit plugins from within Textpattern CMS.

ied_plugin_composer Create, publish and edit plugins from within Textpattern CMS. Creates a new page under the Extensions tab where you can edit and e

Stef Dawson 8 Oct 3, 2020
Opinionated version of Wikimedia composer-merge-plugin to work in pair with Bamarni composer-bin-plugin.

Composer Inheritance Plugin Opinionated version of Wikimedia composer-merge-plugin to work in pair with bamarni/composer-bin-plugin. Usage If you are

Théo FIDRY 25 Dec 2, 2022
Simply removes the applcation's front-end and redirects it to the admin area.

Simply removes the application's front-end and redirects it to the admin area.

Albright Labs 1 Mar 28, 2022
Composer Registrar Composer Plugin for Magento 2

This module add a global registration.php that replace the default glob search performed for each request to discover the components not installed from composer.

OpenGento 3 Mar 22, 2022
🔨 Prefixes all PHP namespaces in a file/directory to isolate the code bundled in PHARs.

PHP-Scoper PHP-Scoper is a tool which essentially moves any body of code, including all dependencies such as vendor directories, to a new and distinct

Humbug 590 Jan 2, 2023
Composer Plugin for automatically including files for easing function usage in php.

Php Inc Php inc is a composer plugin for automatically including certain files into composer's autoload and autoload-dev files config. Given a set of

Krak 5 Jan 11, 2022
Composer Repository Manager for selling Magento 2 extension and offering composer installation for ordered packages.

Magento 2 Composer Repository Credits We got inspired by https://github.com/Genmato. Composer Repository for Magento 2 This extension works as a Magen

EAdesign 18 Dec 16, 2021
Simple library that abstracts different metrics collectors. I find this necessary to have a consistent and simple metrics (functional) API that doesn't cause vendor lock-in.

Metrics Simple library that abstracts different metrics collectors. I find this necessary to have a consistent and simple metrics API that doesn't cau

Benjamin Eberlei 311 Nov 20, 2022
Json-normalizer: Provides generic and vendor-specific normalizers for normalizing JSON documents

json-normalizer Provides generic and vendor-specific normalizers for normalizing JSON documents. Installation Run $ composer require ergebnis/json-nor

null 64 Dec 31, 2022
Check modules in app/code and vendor for PHP 8 compatibility status - PHP_CodeSniffer & php-compatibility standard

M2 PHP version compatibility check How To use Requires PHP 7.3+ | PHP 8 This app will run PHP_CodeSniffer with phpcompatibility/php-compatibility on t

William Tran 24 Oct 13, 2022