0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-02-17 22:44:24 -05:00

fix: ensure outDir doesn't lead to bundlers bloating Lambda size (#10550)

* fix: ensure outDir doesn't lead to bundlers bloating Lambda size

* add changeset

* Update packages/astro/src/assets/vite-plugin-assets.ts

Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>

---------

Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
This commit is contained in:
Simon Knott 2024-03-26 11:44:04 +01:00 committed by GitHub
parent 54c2f9707f
commit 34fa8e131b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 2 deletions

View file

@ -0,0 +1,5 @@
---
"astro": patch
---
Fixes bug where server builds would include unneeded assets in SSR Function, potentially leading to upload errors on Vercel, Netlify because of size limits

View file

@ -68,14 +68,20 @@ export default function assets({
export { default as Picture } from "astro/components/Picture.astro";
export const imageConfig = ${JSON.stringify(settings.config.image)};
export const outDir = new URL(${JSON.stringify(
// This is used by the @astrojs/node integration to locate images.
// It's unused on other platforms, but on some platforms like Netlify (and presumably also Vercel)
// new URL("dist/...") is interpreted by the bundler as a signal to include that directory
// in the Lambda bundle, which would bloat the bundle with images.
// To prevent this, we mark the URL construction as pure,
// so that it's tree-shaken away for all platforms that don't need it.
export const outDir = /* #__PURE__ */ new URL(${JSON.stringify(
new URL(
isServerLikeOutput(settings.config)
? settings.config.build.client
: settings.config.outDir
)
)});
export const assetsDir = new URL(${JSON.stringify(settings.config.build.assets)}, outDir);
export const assetsDir = /* #__PURE__ */ new URL(${JSON.stringify(settings.config.build.assets)}, outDir);
export const getImage = async (options) => await getImageInternal(options, imageConfig);
`;
}

View file

@ -18,6 +18,18 @@ describe('Serverless prerender', () => {
assert.ok(await fixture.readFile('../.vercel/output/static/index.html'));
});
it('outDir is tree-shaken if not needed', async () => {
const [file] = await fixture.glob(
'../.vercel/output/functions/_render.func/packages/integrations/vercel/test/fixtures/serverless-prerender/.vercel/output/_functions/chunks/pages/generic_*.mjs'
);
const contents = await fixture.readFile(file);
console.log(contents)
assert.ok(
!contents.includes('const outDir ='),
"outDir is tree-shaken if it's not imported"
);
});
// TODO: The path here seems to be inconsistent?
it.skip('includeFiles work', async () => {
assert.ok(