Skip to content

Commit 7bc5cb4

Browse files
[fix] service-worker builder constant replacement (#7140)
* [fix] service-worker builder constant replacement * update docs * changeset Co-authored-by: Rich Harris <[email protected]>
1 parent 4ef3b47 commit 7bc5cb4

File tree

6 files changed

+20
-2
lines changed

6 files changed

+20
-2
lines changed

.changeset/chilled-suns-travel.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Apply define config to service worker

documentation/docs/10-service-workers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ In SvelteKit, if you have a `src/service-worker.js` file (or `src/service-worker
88

99
> You can change the [location of your service worker](/docs/configuration#files) and [disable automatic registration](/docs/configuration#serviceworker) in your project configuration.
1010
11-
Inside the service worker you have access to the [`$service-worker` module](/docs/modules#$service-worker).
11+
Inside the service worker you have access to the [`$service-worker` module](/docs/modules#$service-worker). If your Vite config specifies `define`, this will be applied to service workers as well as your server/client builds.
1212

1313
Because it needs to be bundled (since browsers don't yet support `import` in this context), and depends on the client-side app's build manifest, **service workers only work in the production build, not in development**. To test it locally, use `vite preview`.

packages/kit/src/exports/vite/build/build_service_worker.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { assets_base } from './utils.js';
1616
* @param {import('vite').Manifest} client_manifest
1717
*/
1818
export async function build_service_worker(
19-
{ config, manifest_data, output_dir, service_worker_entry_file },
19+
{ config, vite_config, manifest_data, output_dir, service_worker_entry_file },
2020
prerendered,
2121
client_manifest
2222
) {
@@ -79,6 +79,7 @@ export async function build_service_worker(
7979
outDir: `${output_dir}/client`,
8080
emptyOutDir: false
8181
},
82+
define: vite_config.define,
8283
configFile: false,
8384
resolve: {
8485
alias: {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if (process.env.MY_ENV === 'MY_ENV DEFINED') {
2+
console.log(process.env.MY_ENV);
3+
}

packages/kit/test/prerendering/basics/test/test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,9 @@ test('injects relative service worker', () => {
230230
assert.ok(content.includes(`navigator.serviceWorker.register('./service-worker.js')`));
231231
});
232232

233+
test('define service worker variables', () => {
234+
const content = read('service-worker.js');
235+
assert.ok(content.includes(`MY_ENV DEFINED`));
236+
});
237+
233238
test.run();

packages/kit/test/prerendering/basics/vite.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ const config = {
1313

1414
plugins: [sveltekit()],
1515

16+
define: {
17+
'process.env.MY_ENV': '"MY_ENV DEFINED"'
18+
},
19+
1620
server: {
1721
fs: {
1822
allow: [path.resolve('../../../src')]

0 commit comments

Comments
 (0)