@@ -16,9 +16,6 @@ import colors from 'picocolors'
16
16
import type { Logger } from '../logger'
17
17
import { VITE_PACKAGE_DIR } from '../constants'
18
18
19
- // https://github.com/sindresorhus/open#app
20
- const OSX_CHROME = 'google chrome'
21
-
22
19
/**
23
20
* Reads the BROWSER environment variable and decides what to do with it.
24
21
* Returns true if it opened a browser or ran a node.js script, otherwise false.
@@ -59,45 +56,49 @@ function executeNodeScript(scriptPath: string, url: string, logger: Logger) {
59
56
return true
60
57
}
61
58
59
+ const supportedChromiumBrowsers = [
60
+ 'Google Chrome Canary' ,
61
+ 'Google Chrome Dev' ,
62
+ 'Google Chrome Beta' ,
63
+ 'Google Chrome' ,
64
+ 'Microsoft Edge' ,
65
+ 'Brave Browser' ,
66
+ 'Vivaldi' ,
67
+ 'Chromium'
68
+ ]
69
+
62
70
function startBrowserProcess ( browser : string | undefined , url : string ) {
63
71
// If we're on OS X, the user hasn't specifically
64
72
// requested a different browser, we can try opening
65
- // Chrome with AppleScript. This lets us reuse an
73
+ // a Chromium browser with AppleScript. This lets us reuse an
66
74
// existing tab when possible instead of creating a new one.
75
+ const preferredOSXBrowser =
76
+ browser === 'google chrome' ? 'Google Chrome' : browser
67
77
const shouldTryOpenChromeWithAppleScript =
68
- process . platform === 'darwin' && ( browser === '' || browser === OSX_CHROME )
78
+ process . platform === 'darwin' &&
79
+ ( ! preferredOSXBrowser ||
80
+ supportedChromiumBrowsers . includes ( preferredOSXBrowser ) )
69
81
70
82
if ( shouldTryOpenChromeWithAppleScript ) {
71
- // Will use the first open browser found from list
72
- const supportedChromiumBrowsers = [
73
- 'Google Chrome Canary' ,
74
- 'Google Chrome Dev' ,
75
- 'Google Chrome Beta' ,
76
- 'Google Chrome' ,
77
- 'Microsoft Edge' ,
78
- 'Brave Browser' ,
79
- 'Vivaldi' ,
80
- 'Chromium'
81
- ]
82
-
83
- for ( const chromiumBrowser of supportedChromiumBrowsers ) {
84
- try {
85
- // Try our best to reuse existing tab
86
- // on OS X Google Chrome with AppleScript
87
- execSync ( `ps cax | grep "${ chromiumBrowser } "` )
88
- execSync (
89
- `osascript openChrome.applescript "${ encodeURI (
90
- url
91
- ) } " "${ chromiumBrowser } "`,
92
- {
93
- cwd : join ( VITE_PACKAGE_DIR , 'bin' ) ,
94
- stdio : 'ignore'
95
- }
96
- )
97
- return true
98
- } catch ( err ) {
99
- // Ignore errors
100
- }
83
+ try {
84
+ const ps = execSync ( 'ps cax' ) . toString ( )
85
+ const openedBrowser =
86
+ preferredOSXBrowser && ps . includes ( preferredOSXBrowser )
87
+ ? preferredOSXBrowser
88
+ : supportedChromiumBrowsers . find ( ( b ) => ps . includes ( b ) )
89
+ // Try our best to reuse existing tab with AppleScript
90
+ execSync (
91
+ `osascript openChrome.applescript "${ encodeURI (
92
+ url
93
+ ) } " "${ openedBrowser } "`,
94
+ {
95
+ cwd : join ( VITE_PACKAGE_DIR , 'bin' ) ,
96
+ stdio : 'ignore'
97
+ }
98
+ )
99
+ return true
100
+ } catch ( err ) {
101
+ // Ignore errors
101
102
}
102
103
}
103
104
0 commit comments