我怎樣用Node.js自動完成工作的

前端先鋒發表於2019-04-11

翻譯:瘋狂的技術宅 原文:medium.com/dailyjs/how…

img

我們在工作中經常會進行很多繁瑣的任務:更新配置檔案,複製和貼上檔案,更新 Jira 標籤等。

慢慢的花在這些任務上的時間會越來越多。我在 2016 年時在一家網路遊戲公司工作時,類似的工作很多。當時我在為遊戲構建可配置的模板,這項工作也許很有價值,但是由於要重新設定皮膚,我必須把大約70%的時間消耗在製作那些遊戲的副本、模板和部署等工作上。

什麼是Reskin?

公司 reskin 的定義是使用相同的遊戲機制,螢幕和元素的定位,但改變了視覺美學,​​如顏色和資源等(譯者吐槽:實際上就是給遊戲換皮。。。)。所以像 “石頭剪子布” 這樣的簡單遊戲,我們將建立一個有如下基本資源的模板。

img

但是當我們建立一個 reskin 時,會使用不同的資源,同時還要保證遊戲仍然可以正常工作。如果你玩過像“糖果傳奇” 或“瘋狂的小鳥”這樣的遊戲,會發現它們通常會在萬聖節,聖誕節或復活節釋出很多風格類似的遊戲。從商業角度來看這很有意義。現在......讓我們回到實施過程。我們的每個遊戲都共享相同的 JavaScript 檔案,並載入到具有不同內容和資源路徑的 JSON 檔案中。結果會怎樣?

img

實際上我和其他開發人員的時間表上已經積壓了大量的任務,我的第一個想法就是“很多工作都可以進行自動化處理”。每當我建立一個新遊戲時,都必須執行以下步驟:

  1. 對模板儲存庫進行 git pull 以確保它們是最新的;
  2. 從主分支建立一個新分支 —— 由 Jira 故障單 ID 進行標識;
  3. 製作我需要構建的模板的副本;
  4. 執行 gulp;
  5. 更新 config.json 檔案中的內容。這將涉及資源路徑,標題以及服務請求的資料;
  6. 在本地進行構建,並檢查與相關人員的 word 文件匹配的內容。 是的,我知道;
  7. 與設計師確認他們是否對外觀滿意;
  8. 合併到主分支並繼續處理下一個分支;
  9. 更新 Jira 標籤的狀態,併為相關人員發表評論;
  10. 清盤並重復。

img

相比較而言,這比單純的開發工作多了許多管理上的事情。我以前曾經接觸過 Bash 指令碼,並通過它來建立一些指令碼以減少工作量。其中一個指令碼更新了模板並建立了一個新分支,另一個指令碼則執行提交併將專案合併到演示和生產環境。

通常手動設定專案需要三到十分鐘,部署可能需要五到十分鐘。但是根據遊戲的複雜程度,也可能需要十分鐘到半天。儘管指令碼能有所幫助,但仍需要大量的時間用於更新內容或追查丟失的資訊。

img

通過編寫程式碼來縮短時間是遠遠不夠的。我們還需要思考優化工作流程的好方法,以便可以更多地去依賴指令碼。比如將內容從 word 文件中移出,並轉移到 Jira 標籤中,再將其分解為相關的自定義欄位。設計人員不是傳送公共驅動器上資源所在位置的連結,而是去設定一個內容交付網路(CDN)儲存庫,其中包含對資源的暫存和釋出到生產環境的 URL。

Jira API

這些事情可能需要一段時間才能實施,但我們的流程確實會隨著時間的推移而得到改善。我對我們的專案管理工具 Jira 的 API 進行了一些研究,並對正在處理的 Jira 標記做了一些請求,得到了大量有價值的資料,所以我決定將這些請求整合到了自己的 Bash 指令碼中,以便能夠從 Jira 標記中讀到值,並在完成後釋出評論和通知相關人員。

從 Bash 過渡到 Node

Bash 指令碼很好,但如果有人在 Windows 機器上工作,它們就無法執行了。在做了一些挖掘之後,我決定用 JavaScript 將整個過程包裝成一個定製的構建工具。我給這個工具取名為Mason,它將會改變一切。

CLI

當你在終端中使用 Git 時(我假設你在這樣做),會發現它有一個非常友好的命令列介面。如果你拼寫錯誤或輸入錯誤的命令,它會友好地對其認為你想要輸入的內容提出建議。一個名為 commander的庫應能夠提供相同的功能,它是我使用的眾多庫之一。

請參考下面這個簡化的程式碼示例。它正在對命令列介面(CLI)程式進行引導。

src/mason.js

使用 npm,你可以從 package.json 執行一個連結,它將會建立一個全域性別名。

npm link
複製程式碼

它將為我提供一個可以呼叫的命令,被稱為 mason。所以每當我在終端中呼叫 mason 時,它將執行 mason.js 指令碼。所有任務都屬於一個名為 mason 的綜合命令,我每天都用它來構建遊戲,節省的時間真的是......令人難以置信。

你可以在下面看到:我將 Jira 標籤編號作為引數傳給命令。這將會使用 curl 去請求 Jira API ,並獲取更新遊戲所需的所有資訊。然後它將繼續構建和部署專案。最後我會發表評論並標記相關人員和設計師,讓他們知道工作已經完成。

$ mason create GS-234
... calling Jira API 
... OK! got values!
... creating a new branch from master called 'GS-234'
... updating templates repository
... copying from template 'pick-from-three'
... injecting values into config JSON
... building project
... deploying game
... Perfect! Here is the live link 
http://www.fake-studio.com/game/fire-water-earth
... Posted comment 'Hey [~ben.smith], this has been released. Does the design look okay? [~jamie.lane]' on Jira.
複製程式碼

依靠這些我們就完成了關鍵的步驟!我對整個專案感到非常滿意。

歡迎關注公眾號:前端先鋒,獲取更多前端乾貨。

我怎樣用Node.js自動完成工作的

相關文章