iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 21
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 21

[鐵人賽第21天] 實戰:快速建立開發環境

有時候難免會遇到要開發環境需要建建置,今天就拿Cargo示範怎麼撰寫自動準備環境的 ShellScript 吧。

首先拉到 CargoInstallation ,我們確定這個程式要用 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 installnpm 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 ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第20天] 實戰:退不出去的硬碟
下一篇
[鐵人賽第22天] 實戰:清理 git repo 遠端分支
系列文
30 天的 ShellScript 教室解決開發者的困擾23

尚未有邦友留言

立即登入留言