What is composer?
Tags: php, composer, beginners
Published: 2020-04-30 14:33:00

## On a high level

A few years back, bower has dominated packages. The need to reuse libraries & other packages for the web has grown massively since then. While the idea wasn't revolutionary (things like brew & apt-get have been around for quite some time), web development introduced the need for project-specific setup. Node has npm, Ruby gems, PHP composer etc.
But what do these managers do and why do you need them?

### Dependency management

Managing dependencies manually is nearly impossible: a particular SDK requires a particular api-library which in turn requires a particular version of a curl-wrapper which uses a particular library to deal with headers. Since we move away from monolithic packages, manual dependency management would be extremely painful. But if every library would hold standardized information on what it requires, we would be able to track these dependencies, wouldn't we? With composer, such a file would be called composer.json. It helps composer to install, remove or update dependencies for the current project.

### Auto-loading

Installing dependencies is one thing, but how do I use them? In PHP, I have a couple of possibilities. And certainly the last thing I want to do is to write a thousand include-statements in every file. Especially, as noted above, if I don't always know what I need. PHP can resolve files by namespace with the use of autoloading. Composer automates this process for us by generating one single autoload-file which in turn let's us have access to all installed packages. You can make your own namespaces and include them into your composer.json to include your own files in the same way. Let's walk through it:
## Installation

The first thing you want to do is to install composer and make sure it is included in your system's PATH variable. 

### Prerequisites

Make sure php is within your PATH by opening up a terminal (Windows: cmd) and trying: `php -v`.
The unleash the full power of composer, make sure you have GIT installed as well: `git --version`. If either of those commands don't work for you, make sure you have php & git installed and explore how to add them to the PATH variable of your system.

### Installing composer

Composer offers a simple [installer](https://getcomposer.org/Composer-Setup.exe) for Windows, if you don't want to use a command line. In general, composer can be installed only using php: [official guide](https://getcomposer.org/download/)

### Verifying installation

After installation, open a new terminal and type `composer`. This should display common commands.

## First project

To give it a test-run, let's create a new folder/project. Enter the path in a terminal and run `composer init`.
You will notice that a composer.json will be created which holds basic information about your project. 

Now we require our first dependency: `composer require vlucas/phpdotenv`. You will notice that composer installs three packages in order to deal with dependencies of this package. Additionally, composer created a vendor-folder to hold these packages.

_NOTE:_ This package is used to easily integrate .env-file variables as system-environment variables. 

Next, let's create an index.php

```PHP

<?php
require 'vendor/autoload.php';

```

We now have "access" to all installed packages via namespace. e.g. 

```PHP

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

```
As you can see, Dotenv\Dotenv will be loaded using the autoloader and we don't have to worry about the dependencies either.

## Packagist

Lastly, the package repository for composer can be found at [packagist.org](https://packagist.org)