Skip to content

Commit bc29607

Browse files
authored
chore: consolidate vite SW+main builds via Environment API (microsoft#41047)
1 parent ee5a51e commit bc29607

5 files changed

Lines changed: 79 additions & 148 deletions

File tree

packages/extension/vite.config.mts

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { defineConfig } from 'vite';
1919
import react from '@vitejs/plugin-react';
2020
import { viteStaticCopy } from 'vite-plugin-static-copy';
2121

22-
// https://vitejs.dev/config/
2322
export default defineConfig({
2423
plugins: [
2524
react(),
@@ -37,17 +36,35 @@ export default defineConfig({
3736
})
3837
],
3938
root: resolve(__dirname, 'src/ui'),
40-
build: {
41-
outDir: resolve(__dirname, 'dist/'),
42-
emptyOutDir: false,
43-
minify: false,
44-
rollupOptions: {
45-
input: ['src/ui/connect.html', 'src/ui/status.html'],
46-
output: {
47-
manualChunks: undefined,
48-
entryFileNames: 'lib/ui/[name].js',
49-
chunkFileNames: 'lib/ui/[name].js',
50-
assetFileNames: 'lib/ui/[name].[ext]'
39+
builder: {},
40+
environments: {
41+
client: {
42+
build: {
43+
outDir: resolve(__dirname, 'dist/'),
44+
emptyOutDir: false,
45+
minify: false,
46+
rollupOptions: {
47+
input: ['src/ui/connect.html', 'src/ui/status.html'],
48+
output: {
49+
manualChunks: undefined,
50+
entryFileNames: 'lib/ui/[name].js',
51+
chunkFileNames: 'lib/ui/[name].js',
52+
assetFileNames: 'lib/ui/[name].[ext]'
53+
}
54+
}
55+
}
56+
},
57+
sw: {
58+
consumer: 'client',
59+
build: {
60+
outDir: resolve(__dirname, 'dist/'),
61+
emptyOutDir: false,
62+
minify: false,
63+
lib: {
64+
entry: resolve(__dirname, 'src/background.ts'),
65+
fileName: 'lib/background',
66+
formats: ['es']
67+
}
5168
}
5269
}
5370
}

packages/extension/vite.sw.config.mts

Lines changed: 0 additions & 31 deletions
This file was deleted.

packages/trace-viewer/vite.config.ts

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,42 @@ export default defineConfig({
4242
'@web': path.resolve(__dirname, '../web/src'),
4343
},
4444
},
45-
build: {
46-
outDir: path.resolve(__dirname, '../playwright-core/lib/vite/traceViewer'),
47-
emptyOutDir: false,
48-
rollupOptions: {
49-
input: {
50-
index: path.resolve(__dirname, 'index.html'),
51-
uiMode: path.resolve(__dirname, 'uiMode.html'),
52-
snapshot: path.resolve(__dirname, 'snapshot.html'),
45+
builder: {},
46+
environments: {
47+
client: {
48+
build: {
49+
outDir: path.resolve(__dirname, '../playwright-core/lib/vite/traceViewer'),
50+
emptyOutDir: false,
51+
rollupOptions: {
52+
input: {
53+
index: path.resolve(__dirname, 'index.html'),
54+
uiMode: path.resolve(__dirname, 'uiMode.html'),
55+
snapshot: path.resolve(__dirname, 'snapshot.html'),
56+
},
57+
output: {
58+
entryFileNames: () => '[name].[hash].js',
59+
assetFileNames: () => '[name].[hash][extname]',
60+
manualChunks: undefined,
61+
},
62+
},
5363
},
54-
output: {
55-
entryFileNames: () => '[name].[hash].js',
56-
assetFileNames: () => '[name].[hash][extname]',
57-
manualChunks: undefined,
64+
},
65+
sw: {
66+
consumer: 'client',
67+
build: {
68+
outDir: path.resolve(__dirname, '../playwright-core/lib/vite/traceViewer'),
69+
emptyOutDir: false,
70+
rollupOptions: {
71+
input: {
72+
sw: path.resolve(__dirname, 'src/sw-main.ts'),
73+
},
74+
output: {
75+
entryFileNames: () => 'sw.bundle.js',
76+
assetFileNames: () => 'sw.[hash][extname]',
77+
manualChunks: undefined,
78+
},
79+
},
5880
},
5981
},
60-
}
82+
},
6183
});

packages/trace-viewer/vite.sw.config.ts

Lines changed: 0 additions & 56 deletions
This file was deleted.

utils/build/build.js

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -857,29 +857,12 @@ const pkgSizePlugin = {
857857
},
858858
};
859859

860-
// Build/watch trace viewer service worker.
861-
steps.push(new ProgramStep({
862-
command: 'npx',
863-
args: [
864-
'vite',
865-
'--config',
866-
'vite.sw.config.ts',
867-
'build',
868-
...(watchMode ? ['--watch', '--minify=false'] : []),
869-
...(withSourceMaps ? ['--sourcemap=inline'] : []),
870-
],
871-
shell: true,
872-
cwd: path.join(__dirname, '..', '..', 'packages', 'trace-viewer'),
873-
concurrent: true,
874-
}));
875-
876860
// Build/watch web packages. The html-reporter, trace-viewer, and dashboard
877861
// also have embedded Vite dev servers used when viewing reports/traces/the
878862
// dashboard live, but their bundled output is consumed as a static artifact
879863
// in other code paths (e.g. HtmlBuilder.build() reads lib/vite/htmlReport/
880864
// and lib/vite/traceViewer/), so we always keep the static build alongside
881-
// HMR. Recorder is not yet HMR'd. The trace viewer service worker still
882-
// builds via vite.sw.config.ts above — that step is not in this loop.
865+
// HMR. Recorder is not yet HMR'd.
883866
const webPackages = ['html-reporter', 'recorder', 'trace-viewer', 'dashboard'];
884867
for (const webPackage of webPackages) {
885868
steps.push(new ProgramStep({
@@ -897,24 +880,20 @@ for (const webPackage of webPackages) {
897880
}));
898881
}
899882

900-
// Build/watch extension UI pages and service worker.
901-
for (const config of ['vite.config.mts', 'vite.sw.config.mts']) {
902-
steps.push(new ProgramStep({
903-
command: 'npx',
904-
args: [
905-
'vite',
906-
'build',
907-
'--config',
908-
config,
909-
...(watchMode ? ['--watch', '--minify=false'] : []),
910-
...(withSourceMaps ? ['--sourcemap=inline'] : []),
911-
'--clearScreen=false',
912-
],
913-
shell: true,
914-
cwd: path.join(__dirname, '..', '..', 'packages', 'extension'),
915-
concurrent: true,
916-
}));
917-
}
883+
// Build/watch extension
884+
steps.push(new ProgramStep({
885+
command: 'npx',
886+
args: [
887+
'vite',
888+
'build',
889+
...(watchMode ? ['--watch', '--minify=false'] : []),
890+
...(withSourceMaps ? ['--sourcemap=inline'] : []),
891+
'--clearScreen=false',
892+
],
893+
shell: true,
894+
cwd: path.join(__dirname, '..', '..', 'packages', 'extension'),
895+
concurrent: true,
896+
}));
918897

919898
// Generate CLI help.
920899
onChanges.push({

0 commit comments

Comments
 (0)