Skip to content

Commit 92a7ea2

Browse files
williamlarkDanDroryAuaskoufis
authored
vite (start|start-ssr): opening default browser on start and start-ssr command (#1223)
Co-authored-by: Dan Drory <[email protected]> Co-authored-by: Adam Skoufis <[email protected]>
1 parent 10791a6 commit 92a7ea2

File tree

9 files changed

+30
-14
lines changed

9 files changed

+30
-14
lines changed

.changeset/dark-plums-play.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'sku': minor
3+
---
4+
5+
`vite (start|start-ssr)`: Open default browser on server start

fixtures/vite-test-app/src/client.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default ({ site }: { site: string }) => {
99
document.getElementById('root')!,
1010
<StrictMode>
1111
<BrowserRouter>
12-
<App site={site} />
12+
<App site={site || 'au'} />
1313
</BrowserRouter>
1414
</StrictMode>,
1515
);

fixtures/vite-test-app/src/server.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default {
1818
<StrictMode>
1919
<LoadableProvider value={loadableCollector!}>
2020
<StaticRouter location={url || '/'}>
21-
<App site={appSite || ''} />
21+
<App site={appSite || 'au'} />
2222
</StaticRouter>
2323
</LoadableProvider>
2424
</StrictMode>,

packages/sku/src/openBrowser/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const supportedChromiumBrowsers = [
2121
'Arc',
2222
];
2323

24-
export default async (url: string) => {
24+
export const openBrowser = async (url: string) => {
2525
if (process.env.OPEN_TAB !== 'false' && !isCI) {
2626
let defaultBrowser = ''; // Has to be set to string otherwise it may be undefined on line 47.
2727
try {

packages/sku/src/program/commands/serve/serve.action.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
withHostile,
1111
} from '@/utils/contextUtils/hosts.js';
1212
import allocatePort from '@/utils/allocatePort.js';
13-
import openBrowser from '@/openBrowser/index.js';
13+
import { openBrowser } from '@/openBrowser/index.js';
1414
import getSiteForHost from '@/utils/contextUtils/getSiteForHost.js';
1515
import { resolveEnvironment } from '@/utils/contextUtils/resolveEnvironment.js';
1616
import provider from '@/services/telemetry/index.js';

packages/sku/src/program/commands/start-ssr/webpack-start-ssr-handler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import makeWebpackConfig from '@/services/webpack/config/webpack.config.ssr.js';
2121
import getStatsConfig from '@/services/webpack/config/statsConfig.js';
2222
import allocatePort from '@/utils/allocatePort.js';
23-
import openBrowser from '@/openBrowser/index.js';
23+
import { openBrowser } from '@/openBrowser/index.js';
2424
import createServerManager from '@/services/serverManager.js';
2525

2626
import { watchVocabCompile } from '@/services/vocab/runVocab.js';

packages/sku/src/program/commands/start/webpack-start-handler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import chalk from 'chalk';
44
import exceptionFormatter from 'exception-formatter';
55
import type { RequestHandler } from 'express';
66

7-
import openBrowser from '@/openBrowser/index.js';
7+
import { openBrowser } from '@/openBrowser/index.js';
88
import getCertificate from '@/utils/certificate.js';
99

1010
import getStatsConfig from '@/services/webpack/config/statsConfig.js';

packages/sku/src/services/vite/helpers/server/createViteServerSsr.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import path from 'node:path';
22
import { Transform } from 'node:stream';
3-
import express, { type RequestHandler } from 'express';
3+
import express, { type RequestHandler, type Express } from 'express';
44
import type { Manifest, ViteDevServer } from 'vite';
55
import crypto from 'node:crypto';
6-
import { createServer as createHttpServer } from 'node:http';
76
import { readFile } from 'node:fs/promises';
87

98
import { createViteConfig } from '@/services/vite/helpers/createConfig.js';
@@ -22,11 +21,11 @@ type CreateServerOptions = {
2221

2322
export const createViteServerSsr = async ({
2423
skuContext,
25-
}: CreateServerOptions) => {
24+
}: CreateServerOptions): Promise<Express> => {
2625
const isProduction = process.env.NODE_ENV === 'production';
2726
try {
2827
const app = express();
29-
const server = createHttpServer(app);
28+
3029
const manifest = isProduction
3130
? JSON.parse(
3231
await readFile(resolve('./dist/.vite/manifest.json'), 'utf-8'),
@@ -63,10 +62,10 @@ export const createViteServerSsr = async ({
6362

6463
app.use('*', createRequestHandler({ skuContext, vite, manifest }));
6564

66-
return server;
65+
return app;
6766
} catch (e: any) {
6867
console.error(e);
69-
return createHttpServer();
68+
return express();
7069
}
7170
};
7271

packages/sku/src/services/vite/index.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { createViteServerSsr } from './helpers/server/createViteServerSsr.js';
66
import { createViteConfig } from './helpers/createConfig.js';
77
import { prerenderRoutes } from './helpers/prerenderRoutes.js';
88
import { cleanTargetDirectory } from '@/utils/buildFileUtils.js';
9+
import { openBrowser } from '@/openBrowser/index.js';
10+
import { getAppHosts } from '@/utils/contextUtils/hosts.js';
911

1012
export const viteService = {
1113
build: async (skuContext: SkuContext) => {
@@ -24,10 +26,15 @@ export const viteService = {
2426
const server = await createViteServer(skuContext);
2527
await server.listen(skuContext.port.client);
2628

29+
const hosts = getAppHosts(skuContext);
30+
const proto = skuContext.httpsDevServer ? 'https' : 'http';
31+
const url = `${proto}://${hosts[0]}:${skuContext.port.client}${skuContext.initialPath}`;
32+
openBrowser(url);
33+
2734
if (skuContext.sites.length > 1) {
2835
skuContext.sites.forEach((site) => {
2936
console.log(
30-
`Running ${site.name} on 'http://${site.host}:${skuContext.port.client}'`,
37+
`Running ${site.name} on '${proto}://${site.host ?? 'localhost'}:${skuContext.port.client}'`,
3138
);
3239
});
3340
} else {
@@ -43,10 +50,15 @@ export const viteService = {
4350
});
4451
server.listen(skuContext.port.server);
4552

53+
const hosts = getAppHosts(skuContext);
54+
const proto = skuContext.httpsDevServer ? 'https' : 'http';
55+
const url = `${proto}://${hosts[0]}:${skuContext.port.server}${skuContext.initialPath}`;
56+
openBrowser(url);
57+
4658
if (skuContext.sites.length > 1) {
4759
skuContext.sites.forEach((site) => {
4860
console.log(
49-
`Running ${site.name} on 'http://${site.host}:${skuContext.port.server}'`,
61+
`Running ${site.name} on '${proto}://${site.host ?? 'localhost'}:${skuContext.port.server}'`,
5062
);
5163
});
5264
} else {

0 commit comments

Comments
 (0)