Drush and Composer, Happy Pals
OK, so you like Drush. You might have it installed using PEAR. You don't know much about Composer, so you're not sure what to make of it.
Well, read on, and find out how easy this stuff really is.
This article focuses on Mac usage, but also applies to any Unix-flavor pretty much. Not so sure about Windows. You folks can fend for yourself, but maybe help out in comments if you feel so inclined.
Part 1: Set Up Your Shell
You have: A Mac (or other unix variant), git, an open terminal window, and the ability type
which php and get meaningful output.
We're going to put Drush and some other stuff in a 'binary' directory in our home folder, and we're going to do it by typing. No mouse clicks involved. You will be CLI ninja!
First we'll make the directory.
You could call it anything, especially if there's a
bin/ already there. Suggested replacement names:
drupalstuff/, and so forth.
cd into your new directory:
Now, find the path to your new directory:
pwd tells you the full path to the directory you're currently in. It probably says
Now we edit our
.profile file to include this directory in PATH. If you know what that means, skip to the next paragraph. You have a dotfile in your home directory called
.profile. It makes the magic incantation of
export PATH=[some stuff] so that bash knows how to find commands when you type them. Let's tell it about our new directory.
.profile in your favorite text editor, or still at the command line, type:
Find the line that says
export PATH=[stuff] and edit it so it says:
Sharp-eyed readers will realize we just added the same path that
pwd told us earlier, with a colon between the different paths in PATH.
Exit nano with something like these keypresses:
yfor yes I'd like to save
returnfor the same file name.
Now you can either quit the terminal and start it back up again, or do this:
You've now set up the shell. You shouldn't have to do this again for a while.
Part 2: The Drush and Composer Part
Let's install Drush already. As a side-effect, we'll also install Composer in a global location.
Make sure you're in the
bin/ directory you just created:
Let's install Composer:
curl -sS https://getcomposer.org/installer | php
Now let's give it a nicer name:
mv composer.phar composer
Test by typing
which composer. There. That was terribly difficult.
Now we can use Composer to create a
composer.json file. Like this:
This will walk you through some interactive stuff about the little project we're creating here, and most of the defaults are fine. However, when it asks for dependencies and dev dependencies, say 'no.' Like this:
Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? no Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Finally it will ask you to confirm generation, and you can just hit return.
ls and look at the directory, you'll see there's now a file called
composer.json. This is the file Composer uses to figure out what goes where within that directory.
One of the things Composer can do is put 'binary' files where you specify. For instance, if you were trying to install Drush, you could tell Composer to put the Drush binaries in a special place. Which sounds a lot like what we're doing here. So:
composer config bin-dir .
Pay special attention to the
. at the end of that. It means we want Composer to put all binaries in the same directory as the
And now for the magic moment:
composer require drush/drush:*
Composer will grind for a little bit and download a bunch of stuff for you. And when it's done, you are the proud owner of a Drush installation.
ls and you'll see that Drush is right there in
bin/, waiting for bash to find it. So do that:
Part 3: The Update Part
Let's pretend you're the kind of person who updates their software all the time. I mean, if you're not. Because you are, right?
So now if we want to update Drush, we do this:
cd ~/bin composer update
And that's it.
The way this is set up, you'll get the latest version of Drush listed on packagist.org, which in effect means
dev-master. If you want to limit the stability of the branch you want, you can add this requirement in your
You can learn all about that from Composer's excellent documentation page on the matter: https://getcomposer.org/doc/04-schema.md#minimum-stability