Allows Components to be installed with Composer.
This project is maintained by RobLoach
Allows installation of Components via Composer.
To install a Component with Composer, add the Component to your composer.json
require key. The following will install both jQuery and
normalize.css:
{
    "require": {
        "components/jquery": "1.9.*",
        "components/normalize.css": "2.*"
    }
}
The easiest approach is to use the Component statically. Just reference the
Components manually using a script or link tag:
<script src="components/jquery/jquery.js"></script>
<link href="components/normalize/normalize.css" rel="stylesheet" type="text/css">
For complex projects, a RequireJS configuration is available, which allows autoloading scripts only when needed. A require.css file is also compiled, including all Component stylesheets:
<!DOCTYPE html>
<html>
    <head>
        <link href="components/require.css" rel="stylesheet" type="text/css">
        <script src="components/require.js"></script>
    </head>
    <body>
        <h1>jQuery+RequireJS Component Installer Sample Page</h1>
        <script>
          require(['jquery'], function($) {
            $('body').css('background-color', 'green');
          });
        </script>
    </body>
</html>
There are a number of ways to alter how Components are installed and used.
It is posssible to switch where Components are installed by changing the
component-dir option in your root composer.json's config. The following
will install jQuery to public/jquery rather than components/jquery:
{
    "require": {
        "components/jquery": "*"
    },
    "config": {
        "component-dir": "public"
    }
}
Defaults to components.
While component-dir depicts where the Components will be installed,
component-baseurl tells RequireJS the base path that will use when attempting
to load the scripts in the web browser. It is important to make sure the
component-baseurl points to the component-dir when loaded externally. See
more about baseUrl in the
RequireJS documentation.
{
    "require": {
        "components/jquery": "*"
    },
    "config": {
        "component-dir": "public/assets",
        "component-baseurl": "/assets"
    }
}
Defaults to components.
To set up a Component to be installed with Component Installer, have it
require the package robloach/component-installer and set the type to
component:
{
    "name": "components/bootstrap",
    "type": "component",
    "require": {
        "robloach/component-installer": "*"
    },
    "extra": {
        "component": {
            "scripts": [
                "js/bootstrap.js"
            ],
            "styles": [
                "css/bootstrap.css"
            ],
            "files": [
                "img/glyphicons-halflings.png",
                "img/glyphicons-halflings-white.png",
                "js/bootstrap.min.js",
                "css/bootstrap.min.css"
            ]
        }
    }
}
scripts - List of all the JavaScript files that will be concatenated
together and processed when loading the Component.styles - List of all the CSS files that should be concatenated together
into the final require.css file.files - Any additional file assets that should be copied into the Component
directory.Components can provide their own Component name. The following will install jQuery to components/myownjquery rather than components/jquery:
{
    "name": "components/jquery",
    "type": "component",
    "extra": {
        "component": {
            "name": "myownjquery"
        }
    }
}
Defaults to the package name, without the vendor.
Components can alter how RequireJS registers and interacts with them by changing some of the configuration options:
{
    "name": "components/backbone",
    "type": "component",
    "require": {
        "components/underscore": "*"
    },
    "extra": {
        "component": {
            "shim": {
                "deps": ["underscore", "jquery"],
                "exports": "Backbone"
            },
            "config": {
                "color": "blue"
            }
        }
    }
}
Current available RequireJS options include:
Using repositories
in composer.json allows use of Component Installer in packages that don't
explicitly provide their own composer.json. In the following example, we
define use of html5shiv:
{
    "require": {
        "afarkas/html5shiv": "3.6.*"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "afarkas/html5shiv",
                "type": "component",
                "version": "3.6.2",
                "dist": {
                    "url": "https://github.com/aFarkas/html5shiv/archive/3.6.2.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "https://github.com/aFarkas/html5shiv.git",
                    "type": "git",
                    "reference": "3.6.2"
                },
                "component": {
                    "scripts": [
                        "dist/html5shiv.js"
                    ]
                },
                "require": {
                    "robloach/component-installer": "*"
                }
            }
        }
    ]
}
There are many other amazing projects from which Component Installer was inspired. It is encouraged to take a look at some of the other great package management systems:
Component Installer is licensed under the MIT License - see LICENSE.md for details.