Quickly set up existing Laravel projects
Lately, a lot of cool shell aliases and functions have been posted on Twitter. Some of my favourite ones include nah
(short for git reset --hard
), an alias to tail the Laravel log without including exceptions and single letter abbreviations for common tools like php artisan
and yarn
.
I've decided to join in on the fun and create a shell function for something I do about 5 times per day: setting up an existing Laravel project. This usually take about 10 minutes per project (and even longer if you forget to execute the next command halfway through). The whole process includes cloning the repository, installing its dependencies, creating and migrating the database, generating an APP_KEY
and finally building front-end assets.
The linstall
function takes care of the entire process:
#!/bin/bash
linstall ()
{
REPO=$1
BASENAME=$(basename $REPO)
DIR_NAME=${BASENAME%.*}
NAME=${2:-$DIR_NAME}
DB_NAME=${3:-${NAME/./_}}
git clone $REPO $NAME;
cd $NAME;
mysql -u root -e "CREATE DATABASE IF NOT EXISTS $DB_NAME";
cp .env.example .env;
sed -i '' -e "/DB_DATABASE=/ s/=.*/=$DB_NAME/" .env;
composer install;
php artisan key:generate;
php artisan migrate --seed;
if [ -f package.json ]
then
yarn install;
yarn run dev;
fi
}
To install, simply add the function to the end of your ~/.bashrc
file and start a new shell session.
Installing an existing Laravel project is now super easy using the following command:
linstall git@github.com:spatie/spatie.be.git
By default linstall
will use the repository name as the project's directory and database name. You can specify a different directory and database name by passing a second argument to the linstall
command:
# clones into spatie_site directory and creates spatie_site database
linstall git@github.com:spatie/spatie.be.git spatie_site
# clones into spatie_site and creates spatie_db database
linstall git@github.com:spatie/spatie.be.git spatie_site spatie_db