Skip to content

Instantly share code, notes, and snippets.

@mdkq
Created November 13, 2017 04:49
Show Gist options
  • Select an option

  • Save mdkq/89fba195518b1ace5b5f1a59e2fcfe05 to your computer and use it in GitHub Desktop.

Select an option

Save mdkq/89fba195518b1ace5b5f1a59e2fcfe05 to your computer and use it in GitHub Desktop.
bash script for scaffolding web experiments
#!/bin/bash
full=0
while getopts ":n:fm:" opt; do
case ${opt} in
n ) name=$OPTARG
;;
f ) echo "Creating full scaffold"
full=1
;;
m ) modules="$OPTARG "
;;
\?) echo "Usage: scafx [-f] [-m modules]"
;;
: ) echo "Invalid option: -$OPTARG requires an argument" 1>&2
;;
esac
done
shift $((OPTIND -1))
if [ -z "$name" ]; then
read -p 'Experiment name: ' name
fi
if [ -d "$name" ]; then
echo "Directory $name already exists"
exit
fi
mkdir -p "$name/src/static"
touch "$name/src/main.js"
prebuild=''
modules+="browserify budo uglify-js babel-cli babel-preset-env"
if [ $full -eq 1 ]; then
touch "$name/src/style.css"
prebuild='cat normalize.css src/style.css | postcss --no-map -u autoprefixer cssnano > dist/bundle.css && cp src/index.html dist/'
modules+=" postcss-cli autoprefixer cssnano"
echo "<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>$name</title>
<link rel='stylesheet' href='style.css'>
</head>
<body>
<script src='main.js'></script>
</body>
</html>
" > "$name/src/index.html"
fi
dev='budo src/main.js --open --live'
clean='find . -name ".DS_Store" -type f -delete && rm -rf dist/'
build='npm run clean && mkdir dist/ && browserify src/main.js | babel | uglifyjs > dist/bundle.js';
postbuild='cp -r src/static/ dist/static'
deploy=''
echo "{
\"name\": \"$name\",
\"version\": \"1.0.0\",
\"license\": \"MIT\",
\"main\": \"main.js\",
\"babel\": {
\"presets\": [\"env\"]
},
\"scripts\": {
\"dev\": \"$dev\",
\"prebuild\": \"$prebuild\",
\"build\": \"$build\",
\"postbuild\": \"$postbuild\",
\"deploy\": \"$deploy\"
}
}" > "$name/package.json"
cd "$name"
npm i -D $modules
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment