-
-
Save M1ke/906be521dec222668844 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Install bower `npm -g install bower` | |
# Create directory in project root: | |
# bower/ | |
# Then create subdirectories for each bower setup | |
# bower/public/bower.json | |
# bower/compiled/bower.json | |
# The path installed into will be in the same directory as `bower` with the same name as the subdir | |
# ./public | |
# ./compiled | |
# The bower command (e.g. install) | |
cmd=$1 | |
# If a second argument is added it will just use that version | |
if [ $# -eq 2 ]; then | |
cd bower/$2 | |
bower $1 --config.directory="../../${PWD##*/}" | |
cd - | |
else | |
for D in `find ./bower/* -type d` | |
do | |
cd $D | |
bower $1 --config.directory="../../${PWD##*/}" | |
cd - | |
done | |
fi |
Rapid iteration! The script will now install to the same name directory in the project root. So for ./bower/public/bower.json
the components will be downloaded to ./public/
.
For ease of newcomer use (as explained above) the .bowerrc
file should be kept even when using this naming scheme, so it can be installed by regular bower users
There are probably ways of neatening up the script, such as using a sub-shell, and making the actual bower command line into a function (as it's used twice). Please feel free to tweak it and let me know the updates.
The trick I find useful when cd'ing in bash script is to enclose it in parenthesis:
if [ $# -eq 2 ]; then
(
cd bower/$2
bower $1 --config.directory="../../${PWD##*/}"
)
else
for D in `find ./bower/* -type d`
do
(
cd $D
bower $1 --config.directory="../../${PWD##*/}"
)
done
fi
You can be sure that current path won't be changed even if bower fails.
Also it's easy to parallelize with this setup. Just add &
after parenthesis.
There's logic as to why this might be preferable to other alternatives (e.g. the grunt-bowercopy plugin). In those alternatives a separate process is still required to ensure that your bower dependencies go where you want. The problems could be as follows:
This method could be packaged as a plugin to make it easier, but even without it a newcomer can see that they have to
cd
into eachbower/
directory and run the command they need, and could likely hack a similar script to do that.The method could be further improved, as we're already in shell, by removing the
.bowerrc
file altogether and applying a flag to choose the install directory, e.g.This would ensure that the
bower/dir
name is always the same name as wherever the dependencies are installed into in the project root.