Last active
December 10, 2015 00:15
-
-
Save M1ke/906be521dec222668844 to your computer and use it in GitHub Desktop.
Bower multiple install directories. For those using `bower` but not grunt who want to take advantage of the multiple cwd values described in https://github.com/bower/bower/issues/212
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
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.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 usersThere 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.