Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handling of static assets with paths.base #3346

Merged
merged 11 commits into from
Jan 15, 2022
Merged

Conversation

Rich-Harris
Copy link
Member

@Rich-Harris Rich-Harris commented Jan 14, 2022

If you have a file like static/answer.txt, and a paths.base of /basepath (with no paths.assets), the file should be served at /basepath/answer.txt, but instead it's served at /answer.txt because Vite doesn't know about the basepath. This PR fixes it by bypassing Vite's servePublicMiddleware and implementing it ourselves with sirv (which Vite is already using).

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 pnpx changeset and following the prompts. All changesets should be patch until SvelteKit 1.0

@changeset-bot
Copy link

changeset-bot bot commented Jan 14, 2022

🦋 Changeset detected

Latest commit: 2b5e03e

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

@netlify
Copy link

netlify bot commented Jan 14, 2022

✔️ Deploy Preview for kit-demo canceled.

🔨 Explore the source changes: 2b5e03e

🔍 Inspect the deploy log: https://app.netlify.com/sites/kit-demo/deploys/61e3046be9a142000740e64b

@andrewsoutar
Copy link
Contributor

andrewsoutar commented Jan 14, 2022

(Copied over from my comment on #3345)

Getting static assets to work with svelte-kit dev is indeed tricky. What I've tried:

  • In my original changes, I simply set $app/paths.assets to be empty in the build; Vite was already serving the assets from the root path, so as long as every asset use is prefixed by $app/paths.assets, everything works. Of course, this breaks if asset paths are hardcoded, relative, etc. These cases were already broken.
  • Change Vite's base path - right now it's hardcoded to /. Changing it to config.kit.paths.base + '/' seems to work (in my limited testing) if I hack the base path back in before sending it to the router for SSR - assets are correctly served from paths.base. But it fails if the user has a custom paths.assets, because the app is built with the asset path as /_svelte_kit_assets, but the assets are served from paths.base/svelte_kit_assets. We could change the asset path in the app build, but then it breaks parity with svelte-kit preview. We could also use a combination of that scheme and the existing one, depending on whether paths.assets is set, but that sounds like a mess. This also has the downside that Vite requires the trailing slash in its base - so /basepath/ works, but /basepath 404s, which doesn't seem ideal.
  • Serve the static assets "by hand", rather than having Vite do it for us. svelte-kit preview already does this. Honestly, I don't know enough about Vite to know what the tradeoffs are here.

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.

2 participants