From 7ee7891c34986ef90690ff7e406e0b1e93781e02 Mon Sep 17 00:00:00 2001 From: JuanM04 Date: Tue, 5 Apr 2022 17:24:10 -0300 Subject: [PATCH 1/4] Fixed outDir --- packages/integrations/vercel/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index 49a924b2d763..b055e6b2d089 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -23,7 +23,7 @@ export default function vercel(): AstroIntegration { name: '@astrojs/vercel', hooks: { 'astro:config:setup': ({ config }) => { - config.outDir = new URL('./.output/', config.outDir); + config.outDir = new URL('./.output/', config.root); config.build.format = 'directory'; }, 'astro:config:done': ({ setAdapter, config }) => { From d7bf2ca2628c3e66d6058931281ac543d5f77520 Mon Sep 17 00:00:00 2001 From: JuanM04 Date: Tue, 5 Apr 2022 17:32:49 -0300 Subject: [PATCH 2/4] Updated server out --- packages/integrations/vercel/src/index.ts | 28 +++++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index b055e6b2d089..130107b72534 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -33,21 +33,39 @@ export default function vercel(): AstroIntegration { 'astro:build:start': async ({ buildConfig }) => { buildConfig.serverEntry = `${ENTRYFILE}.mjs`; buildConfig.client = new URL('./static/', _config.outDir); - buildConfig.server = new URL('./server/pages/', _config.outDir); + buildConfig.server = new URL('./server/out/', _config.outDir); }, 'astro:build:done': async ({ dir, routes }) => { - const pagesDir = new URL('./server/pages/', dir); + /* + Why do we have two folder? Why don't we just generate all inside server/pages? + When the app builds, it throws some metadata inside a `chunks/` folder. + + ./server/ + pages/ + __astro_entry.mjs + chunks/ + (lots of js files) + + Those chunks will count as serverless functions (which cost money), so we + need to bundle as much as possible in one file. Hence, the following code + */ + + const serverOutDir = new URL('./server/out/', dir); + const bundleDir = new URL('./server/pages/', dir); + + await fs.mkdir(bundleDir, { recursive: true }); // Convert server entry to CommonJS await esbuild.build({ - entryPoints: [fileURLToPath(new URL(`./${ENTRYFILE}.mjs`, pagesDir))], - outfile: fileURLToPath(new URL(`./${ENTRYFILE}.js`, pagesDir)), + entryPoints: [fileURLToPath(new URL(`./${ENTRYFILE}.mjs`, serverOutDir))], + outfile: fileURLToPath(new URL(`./${ENTRYFILE}.js`, bundleDir)), bundle: true, format: 'cjs', platform: 'node', target: 'node14', }); - await fs.rm(new URL(`./${ENTRYFILE}.mjs`, pagesDir)); + + await fs.rm(serverOutDir, { recursive: true }); // Routes Manifest // https://vercel.com/docs/file-system-api#configuration/routes From 44fd08e6cdb761a3feb0e4e66179f5a71a695c44 Mon Sep 17 00:00:00 2001 From: JuanM04 Date: Tue, 5 Apr 2022 17:39:10 -0300 Subject: [PATCH 3/4] changeset --- .changeset/sweet-ways-tan.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sweet-ways-tan.md diff --git a/.changeset/sweet-ways-tan.md b/.changeset/sweet-ways-tan.md new file mode 100644 index 000000000000..c280b0699f8f --- /dev/null +++ b/.changeset/sweet-ways-tan.md @@ -0,0 +1,5 @@ +--- +'@astrojs/vercel': patch +--- + +Fixed build directory and clean-up From 9af6eb97f4fbccc0c78bcfa73a2bb113b4644071 Mon Sep 17 00:00:00 2001 From: JuanM04 Date: Wed, 6 Apr 2022 12:51:07 -0300 Subject: [PATCH 4/4] Renamed out to tmp --- packages/integrations/vercel/src/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index 130107b72534..59561a852bc0 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -33,11 +33,11 @@ export default function vercel(): AstroIntegration { 'astro:build:start': async ({ buildConfig }) => { buildConfig.serverEntry = `${ENTRYFILE}.mjs`; buildConfig.client = new URL('./static/', _config.outDir); - buildConfig.server = new URL('./server/out/', _config.outDir); + buildConfig.server = new URL('./server/tmp/', _config.outDir); }, 'astro:build:done': async ({ dir, routes }) => { /* - Why do we have two folder? Why don't we just generate all inside server/pages? + Why do we need two folders? Why don't we just generate all inside `server/pages/`? When the app builds, it throws some metadata inside a `chunks/` folder. ./server/ @@ -50,14 +50,14 @@ export default function vercel(): AstroIntegration { need to bundle as much as possible in one file. Hence, the following code */ - const serverOutDir = new URL('./server/out/', dir); + const tmpDir = new URL('./server/tmp/', dir); const bundleDir = new URL('./server/pages/', dir); await fs.mkdir(bundleDir, { recursive: true }); // Convert server entry to CommonJS await esbuild.build({ - entryPoints: [fileURLToPath(new URL(`./${ENTRYFILE}.mjs`, serverOutDir))], + entryPoints: [fileURLToPath(new URL(`./${ENTRYFILE}.mjs`, tmpDir))], outfile: fileURLToPath(new URL(`./${ENTRYFILE}.js`, bundleDir)), bundle: true, format: 'cjs', @@ -65,7 +65,7 @@ export default function vercel(): AstroIntegration { target: 'node14', }); - await fs.rm(serverOutDir, { recursive: true }); + await fs.rm(tmpDir, { recursive: true }); // Routes Manifest // https://vercel.com/docs/file-system-api#configuration/routes