有時候難免會遇到要開發環境需要建建置,今天就拿Cargo示範怎麼撰寫自動準備環境的 ShellScript 吧。
首先拉到 Cargo 的 Installation
,我們確定這個程式要用 node v6.9.1 開發,一種方式是系統內建的 nodeJS 可能就是 6.9.1;另一種就是透過 nvm 安裝。所以我們先確定 node 的版本,如果 Node 的版本就是 6.9.1 ,那我們也不需要 nvm 了。
#!/bin/bash
TAR_NODE_VER="v6.9.1"
NODE_VER=`node -v`
if [ "$NODE_VER" == "$TAR_NODE_VER" ]; then
echo nvm是什麼,可以吃嗎?
else
echo 我們需要 nvm 來安裝 $TAR_NODE_VER 的 node
fi
接著我們需要確定系統有沒有安裝 nvm ,所以修改一下 else 裡面的內容:
echo 我們需要 nvm 來安裝 $TAR_NODE_VER 的 node
if nvm --version; then
echo nvm installed, skip
else
echo nvm not install
fi
可是要別人手動安裝 nvm 還是好麻煩,所以繼續改這個 else :
echo nvm not install
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
cat << EOF
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
EOF >> ~/.profile
source ~/.profile
接著還要用 nvm 安裝 node v6.9.1 ,所以把上面整個整合起來, Script 會長這樣:
#!/bin/bash
TAR_NODE_VER="v6.9.1"
NODE_VER=`node -v`
if [ "$NODE_VER" == "$TAR_NODE_VER" ]; then
echo nvm是什麼,可以吃嗎?
else
echo 我們需要 nvm 來安裝 $TAR_NODE_VER 的 node
if nvm --version; then
echo nvm installed, skip
else
echo nvm not install
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.profile
echo '[ -s "$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"' >> ~/.profile
source ~/.profile
fi
nvm install $TAR_NODE_VER
nvm alias default $TAR_NODE_VER
fi
echo node ready.
好,我們自動化的把 Node 準備好了,接下來還得準備 ruby、imagemagick、graphicsmagick , Ruby 裝好也得裝 sass 跟 compass 。
然而 Mac 跟 Linux 裝 ruby、imagemagick、graphicsmagick 的方法不太一樣,怎麼辦呢?
uname
執行 uname 可以看到核心名稱, Mac 的核心叫做 Darwin , Linux 本身就是核心名稱啦。所以程式會長這樣:
echo node ready.
PACKAGES="ruby imagemagick graphicsmagick"
KERNEL=`uname`
if [ "$KERNEL" == "Darwin" ]; then
if !which brew; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi
for pack in $PACKAGES; do
brew install $pack
done
else
if which apt-get; then
sudo apt-get install -y $PACKAGES
elif which yum; then
sudo yum install $PACKAGES
elif which pacman; then
sudo pacman -S $PACKAGES
else
echo "這個發行版太特殊了,請自己把 $PACKAGES 安裝好,然後按下 Enter"
read
fi
fi
echo $PACKAGES ready
是的, Linux 每個發行版安裝套件的方式都不太一樣,判斷發行版的方式也不太一樣,所以最快的方法莫過於直接判斷套件管理程式在不在 XD
接著要安裝 ruby 的 sass 與 compass 還有 node 的 babel-cli 到系統,這會需要管理員權限,還好 Mac 跟 Linux 都可以用 sudo 切換成 root 權限。這裡就不用再判斷系統啦
echo $PACKAGES ready
gem install sass compass
if which sudo; then
sudo npm -g install babel-cli
else
echo 你的系統沒有 sudo ,請以 root 權限執行下列指令:
echo npm -g install babel-cli
echo "完成後請按 Enter"
read
fi
if ! which compass; then
echo ruby PATH not set
echo unable to auto finish process
exit 0
fi
echo sass compass babel-cli ready
最後好人做到底,把 npm install
與 npm build
放進去吧,完整的 Script 誕生了:
#!/bin/bash
TAR_NODE_VER="v6.9.1"
NODE_VER=`node -v`
if [ "$NODE_VER" == "$TAR_NODE_VER" ]; then
echo nvm是什麼,可以吃嗎?
else
echo 我們需要 nvm 來安裝 $TAR_NODE_VER 的 node
if nvm --version; then
echo nvm installed, skip
else
echo nvm not install
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.profile
echo '[ -s "$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"' >> ~/.profile
source ~/.profile
fi
nvm install $TAR_NODE_VER
nvm alias default $TAR_NODE_VER
fi
echo node ready.
PACKAGES="ruby imagemagick graphicsmagick"
KERNEL=`uname`
if [ "$KERNEL" == "Darwin" ]; then
if !which brew; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi
for pack in $PACKAGES; do
brew install $pack
done
else
if which apt-get; then
sudo apt-get install -y $PACKAGES
elif which yum; then
sudo yum install $PACKAGES
elif which pacman; then
sudo pacman -S $PACKAGES
else
echo "這個發行版太特殊了,請自己把 $PACKAGES 安裝好,然後按下 Enter"
read
fi
fi
echo $PACKAGES ready
gem install sass compass
if which sudo; then
sudo npm -g install babel-cli
else
echo 你的系統沒有 sudo ,請以 root 權限執行下列指令:
echo npm -g install babel-cli
echo "完成後請按 Enter"
read
fi
if ! which compass; then
echo ruby PATH not set
echo unable to auto finish process
exit 0
fi
echo sass compass babel-cli ready
npm install
npm build
touch config/local.js
echo use npm run start server
以上
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。