開發者工具提供了命令行與 HTTP 服務兩種接口供外部調用,開發者能夠經過命令行或 HTTP 請求指示工具進行登陸、預覽、上傳等操做。
傳送門: "developers.weixin.qq.com/miniprogram…"css
經過命令行與 HTTP 服務能夠想到一下幾種思路html
爲何我不用第一種和第二種?一是由於搞這種現成的配置式的東西弄出來沒什麼成就感,用第三個思路寫順即可以練練Node,二是由於雖然思路有了,但配置還沒玩明白,等我研究明白了再單獨寫吧。emmmm.....前端
你正在認真coding,和某個bug激烈戰鬥,已經有了頭緒正準備一鼓作氣幹掉它。忽然被別人打斷並告訴你須要爲他提供一個測試環境的二維碼...
爲了這個二維碼你作了如下事情 node
在後端功能的實現上用瞭如下框架和模塊git
mac系統上開發者工具會默認的安裝路徑是/Applications/wechatwebdevtools.app
, 經過process模塊執行shell命令open /Applications/wechatwebdevtools.app
便可打開開發者工具。web
上傳接口是這個系統的核心,雖然很簡單但要實現這個接口仍是須要你對小程序工具的http調用有必定了解,接下來詳細說一下如何完成此功能:
上文說到小程序開發者工具提供了命令行與 HTTP 服務兩種接口供外部調用,開發者能夠經過命令行或 HTTP 請求指示工具進行登陸、預覽、上傳等操做。shell
第一步(開啓http服務)
打開你的開發者工具 設置——>安全設置——>服務端口
,由於調用開發者工具提供的http服務必定要拼接本地的端口號,因此後續全部的操做都是要基於開發者工具開啓且服務端口開啓的狀態下進行操做的,默認狀況下服務端口是關閉的,http 服務在工具啓動後自動開啓,HTTP 服務端口號在用戶目錄下記錄,可經過檢查用戶目錄、檢查用戶目錄下是否有端口文件及嘗試鏈接來判斷工具是否安裝。 express
macOS : ~/Library/Application Support/微信web開發者工具/Default/.ide
微信web開發者工具/User Data/Default/.ide
注意!!!
像是在mac中直接去讀取這個默認路徑是獲取不到的,由於mac中通常會將工具安裝在你的當前帳戶文件夾下,因此若是發現沒法讀取的狀況能夠到Uers的文件夾找找看。 好比個人mac上要想訪問端口文件完整路徑是這樣的:
const portPath = '../../Users/admin/Library/Application\ Support/微信web開發者工具/Default/.ide';
gulp
讀取端口的功能封裝,後續會用到 小程序
第三步(上傳)
接口定義:
經過調用獲取端口號的方法,請求上傳接口拼接端口,指定項目上傳目錄,就是編譯出來的dist文件夾目錄,將接收的描述和版本號一併拼接發送上傳請求便可。
這個接口的實現主要是經過Node接收項目地址而後執行git clone的shell命令實現, 須要用到Node的child_process子進程模塊用來執行shell腳本。
代碼實現
Gitlab有一個很是強大的API系統,幾乎全部的功能都有相應的API接口,爲了使用API,須要從Gitlab中獲取私有token。
成功拿到token以後只需在請求的時候做爲query參數傳遞便可:
項目分支信息API api/v3/projects/ [projectId] /repository/branches
小程序項目tagaAPI api/v3/projects/ [projectId] /repository/tags
分支和tag接口實現的思路是同樣的,接到前端請求後執行各類git命令完成
cd ./project
代碼實現
示例爲分支切換的相關代碼,tag實現的思路是同樣的,只不過要把相關git命令替換便可。
這裏須要注意一下,這個接口的實現是很是靈活的,須要根據你當前項目的編譯文件進行配置,好比個人項目開發時使用gulp打包編譯環境到dist,其編譯命令分別爲:
gulp build:Dev(聯調環境)
gulp build:Test(測試環境)
gulp build:Slave(預發佈環境)
gulp build:Prod(線上環境)
那麼同理,配置好dist輸出文件目錄,收到請求後執行事先實現好的shell命令便可完成打包這一步,若是你不太瞭解環境編譯打包這塊內容,能夠參考我上一篇文章"《武裝你的小程序——開發流程指南》";
代碼實現
目前爲止咱們已經實現了六個後端功能,並生成了對應路由,分別爲:
/open
實現拉起開發者工具的接口;/up
上傳小程序後臺接口;/clone
拉取git項目到本地的接口;/checkoutBranch || /checkoutTag
獲取gitlab項目信息,分支及tag的接口;/branches || /tags
獲取gitlab項目信息,分支及tag的接口;/branches
項目編譯打包的接口;前端頁面我就不提供示例代碼了,ui框架和開發框架根據你們的喜愛決定,由於有了上面這些接口咱們就已經能夠愉快的對前端頁面進行你須要的一些定製了,這個時候須要咱們考慮的就是一些前端的交互邏輯了,如何利用好這些接口將起串起來組成條完整的流程,如何利用gitlab的其餘api擴展你須要的其餘功能,好比加一個提交記錄頁面...
前面的流程圖已經大體畫出了個人思路,下面我將個人前端實現思路詳細描述一下,供你們參考:
/clone
接口將代碼拉取到項目中,同時將端口號路徑儲存起來後面用。/open
接口拉起開發者工具/branchs
和/tag
接口獲取分支和tag信息,將其展現在頁面上。/checkoutBranch 或 /checkoutTag
接口傳遞分支名,後端調用相應的git命令。/build
接口傳遞環境變量進行構建。/up
接口傳遞版本號和描述發送上傳請求,上傳成功頁面將描述,提交人,時間,環境等必要信息展現出來。到這裏一個簡單的小程序發佈系統就完成了,本文只是記錄了個人一個開發思路但願能對你們有所啓發,有不少地方考慮的仍是不夠完善但基本能用了,你們能夠發散思惟實現一個本身的發佈系統,也歡迎交流想法和指正個人錯誤,同時歡迎你們關注公衆號前端小苑,我會按期在這裏發表原創文章。