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

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

img

咱們在工做中常常會進行不少繁瑣的任務:更新配置文件,複製和粘貼文件,更新 Jira 標籤等。node

慢慢的花在這些任務上的時間會愈來愈多。我在 2016 年時在一家網絡遊戲公司工做時,相似的工做不少。當時我在爲遊戲構建可配置的模板,這項工做也許頗有價值,可是因爲要從新設置皮膚,我必須把大約70%的時間消耗在製做那些遊戲的副本、模板和部署等工做上。git

什麼是Reskin?

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

img

可是當咱們建立一個 reskin 時,會使用不一樣的資源,同時還要保證遊戲仍然能夠正常工做。若是你玩過像「糖果傳奇」 或「瘋狂的小鳥」這樣的遊戲,會發現它們一般會在萬聖節,聖誕節或復活節發佈不少風格相似的遊戲。從商業角度來看這頗有意義。如今......讓咱們回到實施過程。咱們的每一個遊戲都共享相同的 JavaScript 文件,並加載到具備不一樣內容和資源路徑的 JSON 文件中。結果會怎樣?json

img

實際上我和其餘開發人員的時間表上已經積壓了大量的任務,個人第一個想法就是「不少工做均可以進行自動化處理」。每當我建立一個新遊戲時,都必須執行如下步驟:gulp

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

img

相比較而言,這比單純的開發工做多了許多管理上的事情。我之前曾經接觸過 Bash 腳本,並經過它來建立一些腳本以減小工做量。其中一個腳本更新了模板並建立了一個新分支,另外一個腳本則執行提交併將項目合併到演示和生產環境。bash

一般手動設置項目須要三到十分鐘,部署可能須要五到十分鐘。可是根據遊戲的複雜程度,也可能須要十分鐘到半天。儘管腳本能有所幫助,但仍須要大量的時間用於更新內容或追查丟失的信息。網絡

img

經過編寫代碼來縮短期是遠遠不夠的。咱們還須要思考優化工做流程的好方法,以即可以更多地去依賴腳本。好比將內容從 word 文檔中移出,並轉移到 Jira 標籤中,再將其分解爲相關的自定義字段。設計人員不是發送公共驅動器上資源所在位置的連接,而是去設置一個內容交付網絡(CDN)存儲庫,其中包含對資源的暫存和發佈到生產環境的 URL。curl

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.
複製代碼

依靠這些咱們就完成了關鍵的步驟!我對整個項目感到很是滿意。

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

相關文章
相關標籤/搜索