如何自動(dòng)化你的開(kāi)發(fā)環(huán)境
如果你是一個(gè)程序員,無(wú)論前端還是后端,無(wú)論業(yè)余還是專(zhuān)業(yè),你可能都會(huì)遇到這樣一個(gè)問(wèn)題:你需要一邊寫(xiě)代碼,一邊運(yùn)行程序,方便查看代碼產(chǎn)生的效果。
舉個(gè)例子吧,當(dāng)你寫(xiě)了一部分 Django views,你會(huì)開(kāi)啟一個(gè)終端運(yùn)行 Django
cd?myapp/rear_end/
source?env/bin/activate
python?manage.py?runserver
然后你有寫(xiě)了幾個(gè)前端頁(yè)面,你要啟動(dòng) npm
cd?myapp/front_end/
npm?run?dev
現(xiàn)在突然報(bào)了個(gè)錯(cuò),提升你 xxx 包沒(méi)有安裝,于是你又開(kāi)啟了一個(gè)終端,運(yùn)行了 pip
source?env/bin/activate
pip?install?xxx
也許你還需要在開(kāi)啟一個(gè)終端,來(lái)管理 npm 的包。
然后你就在這些個(gè)終端里面切換來(lái)切換去,不知道怎么搞得,電腦卡了下,你一怒之下用快捷鍵退出了好幾個(gè)應(yīng)用程序,其中就包括你開(kāi)啟的幾個(gè)終端。
然后你的程序崩潰了。

你也崩潰了,編程太艱難了,現(xiàn)在你不得不手動(dòng)一個(gè)一個(gè)啟動(dòng)這些終端,然后在敲入相應(yīng)的指令。即使你的電腦不卡,也許會(huì)關(guān)機(jī),再開(kāi)機(jī),仍然需要做這些步驟。
現(xiàn)在是時(shí)候?qū)ふ腋玫霓k法了。
也許你知道 tmux (tmux教程[1]) 可以對(duì)一個(gè)終端進(jìn)行分屏,每個(gè)屏里面是一個(gè)獨(dú)立的 terminal session,可以分別執(zhí)行不同的命令,讓我們?cè)谕粋€(gè)窗口看到不同任務(wù)的執(zhí)行情況,比如像這樣:

這樣雖然解決了不同終端間來(lái)回切換的問(wèn)題,但還有一個(gè)問(wèn)題沒(méi)解決,就是如果不小心關(guān)閉了這個(gè)終端,或者電腦崩潰了,如何快速恢復(fù)運(yùn)行好的狀態(tài)?
這就需要 tmuxinator 了,先看下效果圖:

tmuxinator 是一個(gè)處理 tmux 配置的完美工具,自動(dòng)化開(kāi)發(fā)環(huán)境從未如此簡(jiǎn)單。現(xiàn)在讓我們看下如何使用。
1、先安裝 tmuxinator。
當(dāng)然了,安裝前確保你已經(jīng)安裝了 tmux,可以看這個(gè)tmux教程[2]
gem?install?tmuxinator
注:
gem 是 Ruby 的一個(gè)包管理器,安裝完 Ruby,你就有了 gem 工具,正如安裝完 Python,你就有了 pip 工具。
2、在項(xiàng)目目錄生成一個(gè)配置文件
假如項(xiàng)目叫 dream,然后在終端執(zhí)行
tmuxinator?new?dream?
會(huì)生成文件 ~/.config/tmuxinator/dream.yml
3、修改這個(gè)配置文件,加入自己執(zhí)行的命令,如下所示:
name: dream
root: ~/dev/mtg-dreamland
windows:
- main:
layout: even-horizontal
panes:
- client:
- cd client
- git status
- ls
- server:
- cd server
- git status
- ls
- build:
layout: even-horizontal
panes:
- client:
- cd client
- npm start
- server:
- cd server
- nodemon server.js
這個(gè)配置文件定義了 2 個(gè)窗口:“main”和“build”。在每一個(gè)中,有 2 個(gè)窗格“客戶(hù)端”和“服務(wù)器”。然后只需定義我想在啟動(dòng)時(shí)在每個(gè)窗格中運(yùn)行的命令,我們就完成了!
然后執(zhí)行 tmuxinator start dream,就可以看到所有的命令都會(huì)按照你的編排進(jìn)行執(zhí)行,實(shí)現(xiàn)了開(kāi)發(fā)環(huán)境的自動(dòng)化,如下:

最后
這只是 tmuxinator 的簡(jiǎn)單應(yīng)用,如果要想了解它更多的能力,可以去官方 GitHub[3] 看下。
如果有幫助,求關(guān)注下。
參考資料
tmux教程: https://www.ruanyifeng.com/blog/2019/10/tmux.html
[2]tmux教程: https://www.ruanyifeng.com/blog/2019/10/tmux.html
[3]官方 GitHub: https://github.com/tmuxinator/tmuxinator#windows
