我們經常會看到一些腳手架會在啟動完devServer后自動打開一個頁面,大多數都是使用open這個庫,開發體驗很不錯,但是如果你停止server,重新執行命令,會發現瀏覽器再次打開一個新的(tab)標簽頁,隨著多次執行,會有一堆標簽頁,這時候就顯得沒那么優雅了(對于一個強迫癥來說),看到cra(create-react-app)就沒有這個問題,直接復用之前打開的頁面,感覺很神奇,搜索一番,看到SO上的回答,原來是使用了appleScript自動化(點擊這里)去實作的,而且僅支持mac OS,其他平臺fallback到open這個庫的行為,
核心流程如下:
1. 先使用execSync同步執行shell命令判斷瀏覽器行程是否存在,如果不存在會拋錯誤,不會執行后續流程
2.使用execSync同步執行shell命令,使用macos下獨有的命令`osascript`去執行appleScript(如果你想實作同樣的功能,react團隊已經為我們寫好了,可以直接拷貝原始碼),這個script主要邏輯如下:
2.1 決議啟動腳本時傳入的引數,第一個引數為url,第二個引數為瀏覽器名稱(沒有指定默認使用Google Chrome),
2.2 打開指定的瀏覽器,查找視窗(因為可以打開多個視窗,這里是多對多的關系),如果沒有視窗可用,則新建視窗,
2.3 遍歷視窗下所有的標簽頁(雙重回圈),判斷當前標簽頁url是否包含傳入的url
2.3.1 如果包含,重繪當前標簽頁,并且激活標簽頁所在的視窗(切換焦點), 終止回圈
2.3.2 如果不包含,查找是否有空標簽頁,如果有直接復用,反之,創建一個空標簽頁打開目標url

順便提一下appleScript,他是mac OS實作自動化的主要手段,可以操控系統App,完成一些繁瑣重復的作業,
感興趣的童鞋可以看這篇文章,傳送門
如下圖所示,打開一個系統對話框

StackOverFlow上的回答
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456954.html
標籤:OS X
