Code Monkey home page Code Monkey logo

custom-installer's Introduction

Composer Custom Type Installer

Build Status

Adds a root-level custom type installer path to composer.json. Any custom type can be used to define a path the type should be installed in.

Installation

Simply require this library in your composer.json file. Typically this will be added as a dependency of the custom type to ensure that the library is loaded before the library that needs it. However, this can be added to the root composer.json, as long as it goes before any library that needs it.

{
    "require": {
        "davidbarratt/custom-installer": "1.0.*@dev"
    }
}

Usage

The added parameter(s) are only allowed on the root to avoid conflicts between multiple libraries. This also prevents a project owner from having a directory accidentally wiped out by a library. Note: Each package will go in it’s respective folder in the order in which they are installed.

The configuration has to be added in custom-installer of composer.json's extra section. It is similar to Composer installer's installation paths.

Pattern syntax

The key of the the configuration array is the path pattern. You can use some replacement tokens:

  • {$name}: The name of the package (e.g. yaml of symfony/yaml)
  • {$vendor}: The vendor of the package (e.g. symfony of symfony/yaml)
  • {$type}: for the composer package type (e.g. library, drupal-module)

Package filters

The value of the configuration array has to be an array. It holds the package filter for the given pattern. The pattern will be applied if any filter matches.

Package type filter

With type:[package-type] you can define a pattern per package type. You can use any custom package type and are not limited to a predefined set.

Composer specific package types metapackage or composer-plugin will never be handled by Custom Installer.

Example: type:custom-library for package type custom-library

Package name filter

You can specify a pattern per full package name ([vendor]/[name]).

Custom Installer will only handle a specific package if a configuration exists that also handles the package type in general.

Examples

{
    "extra": {
        "custom-installer": {
            "web/": ["type:drupal-core"],
            "web/sites/{$name}/": ["type:drupal-site"],
            "custom/{$type}/{$vendor}/{$name}/": ["type:random-type"],
            "vendor/{$vendor}/{$name}/": ["type:library"],
            "web/sites/all/libraries/{$name}/": [
                "type:component",
                "ckeditor/ckeditor",
                "flesler/jquery.scrollto"
            ],
            "custom-folder-for-single-package": ["myvendorname/single-package"],
        }
    }
}

In the example we want to make sure CKEditor and Jquery ScrollTo will be placed in web/sites/all/libraries. Both packages are of of package type library. In order to change the path of those packages, we must declare a fallback for the package type library. It shall stay in the default vendor location (as library is the default composer package type). If you do not do that the custom installer cannot handle the single packages (ckeditor and flesler/jquery.scrollto ) due to the way composer installer plugins work.

custom-installer's People

Contributors

davidbarratt avatar derhasi avatar suzymasri avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.