Skip to content

feat: output workers to client assets - #16870

Closed
willfarrell wants to merge 2 commits into
sveltejs:restore-worker-output-namingfrom
willfarrell:feature/worker-client-output
Closed

feat: output workers to client assets#16870
willfarrell wants to merge 2 commits into
sveltejs:restore-worker-output-namingfrom
willfarrell:feature/worker-client-output

Conversation

@willfarrell

Copy link
Copy Markdown
Contributor

Worker chunks from ?worker and ?worker&url imports are emitted to {appDir}/immutable/workers/. In two cases, only the SSR build emits them: when every page has csr: false (the client build is skipped entirely), and when the import lives in a server-only module such as +page.server.js. The files then exist only in output/server/, which adapters never publish, so the worker URL returns a 404 in production.

The build already handles this problem for immutable/assets/ by copying server-emitted files into output/client/. This PR applies the same copy to immutable/workers/ in both build branches. Filenames are content-hashed, so copying over an identical file is harmless, and apps without workers are unaffected.

Tests: the basics app covers the server-only import case by checking that the worker file lands in the client output. The amp app covers the skipped client build case by fetching the worker URL and expecting a 200. Both tests fail without the fix.

Related: #12438. That issue also stems from worker files being overlooked, but it concerns the $service-worker build list and is not resolved here.


Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests

  • Run the tests with pnpm test and lint the project with pnpm lint and pnpm check

Changesets

  • If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpm changeset and following the prompts. Changesets that add features should be minor and those that fix bugs should be patch. Please prefix changeset messages with feat:, fix:, or chore:.

Edits

  • Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed.

@pkg-svelte-dev

pkg-svelte-dev Bot commented Aug 20, 2026

Copy link
Copy Markdown

Install the latest version of @sveltejs/kit from e4cc2e9:

pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/e4cc2e90268c6cdb868b04e042d7351f1e44fe20

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/kit/pr/16870

Note

This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed.

@changeset-bot

changeset-bot Bot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: e4cc2e9

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@sveltejs/kit Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@teemingc

Copy link
Copy Markdown
Member

Thanks for the PR. Do you mind rebasing this on the version-3 branch?

@Nic-Polumeyv
Nic-Polumeyv changed the base branch from main to restore-worker-output-naming August 25, 2026 02:23
@Nic-Polumeyv
Nic-Polumeyv force-pushed the feature/worker-client-output branch from a605154 to e4cc2e9 Compare August 25, 2026 02:23
@willfarrell

Copy link
Copy Markdown
Contributor Author

Closing, replaced by #16929 (based off version-3)

teemingc added a commit that referenced this pull request Aug 25, 2026
> Clone of #16870, but bases off
version-3

Worker chunks from `?worker` and `?worker&url` imports are emitted to
`{appDir}/immutable/workers/`. In two cases, only the SSR build emits
them: when every page has `csr: false` (the client build is skipped
entirely), and when the import lives in a server-only module such as
`+page.server.js`. The files then exist only in `output/server/`, which
adapters never publish, so the worker URL returns a 404 in production.

The build already handles this problem for `immutable/assets/` by
copying server-emitted files into `output/client/`. This PR applies the
same copy to `immutable/workers/` in both build branches. Filenames are
content-hashed, so copying over an identical file is harmless, and apps
without workers are unaffected.

Tests: the `basics` app covers the server-only import case by checking
that the worker file lands in the client output. The `amp` app covers
the skipped client build case by fetching the worker URL and expecting a
200. Both tests fail without the fix.

Related: #12438. That issue also stems from worker files being
overlooked, but it concerns the `$service-worker` `build` list and is
not resolved here.
  
---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:

- [ ] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests

- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets

- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Signed-off-by: will Farrell <willfarrell@proton.me>
Co-authored-by: Tee Ming <chewteeming01@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants