-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
When generating a static site we ultimately will be placing it either in the correct folder OR preferably behind a load-balancing reverse proxy that strips off the prefix and have it served from the root. So the prefix should not exist in the build folder at all but the code will need to know to add the prefix when referring to assets.
When generating a dynamic site it can be passed environment variables (or perhaps read a config file) where it gets its base prefix. In the same way the site could exist behind a reverse proxy that strips off the prefix OR it'll handle the prefix itself. It matters not as this is an implementation detail of the adapter. The code needs to know to add the prefix when referring to assets and presumably when doing SSR fetching it'll need to know to add/remove the prefix as necessary.
adapter-node
uses Polka
to serve its assets, executed with the following code:
const server = polka().use(
// https://github.com/lukeed/polka/issues/173
// @ts-ignore - nothing we can do about so just ignore it
compression$1({ threshold: 0 }),
handler
);
handler
is provided as:
const handler = sequence(
[
serve(path.join(__dirname, '/client'), 31536000, true),
serve(path.join(__dirname, '/static'), 0),
serve(path.join(__dirname, '/prerendered'), 0),
ssr
].filter(Boolean)
);
The issue is that ssr
will strip off base
from the beginning of the URL but the three serve
calls do not. The ssr
function IMHO should not be doing this and instead everything should be mounted at the polka().use()
call, something like this:
const server = polka().use(
BASE_PATH,
// https://github.com/lukeed/polka/issues/173
// @ts-ignore - nothing we can do about so just ignore it
compression$1({ threshold: 0 }),
handler
);
where BASE_PATH
would be set either by reading the config file or come in from an environment variable.
This way if I have a reverse proxy that strips prefixes I can have BASE_PATH
set to '' but pass the actual base through a header like X-Forwarded-Prefix
for when building URL's.
If I don't strip the prefix, then I can set BASE_PATH
to the prefix so its handled inside Polka instead but otherwise the rest of the code remains the same.
Anyway, that's my 2c.
Originally posted by @bundabrg in #3726 (comment)
This overlaps a bit with #595