From 86c199c48b9daa859222e0c536e52078898e2f9f Mon Sep 17 00:00:00 2001 From: Michaili K Date: Tue, 26 Sep 2023 14:35:50 +0200 Subject: [PATCH 1/5] Fix assets not getting optimized when `outDir` is outside the CWD --- packages/astro/src/assets/build/generate.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/astro/src/assets/build/generate.ts b/packages/astro/src/assets/build/generate.ts index dfc0d9a0d25f..7b7fb3e742b9 100644 --- a/packages/astro/src/assets/build/generate.ts +++ b/packages/astro/src/assets/build/generate.ts @@ -103,9 +103,13 @@ export async function generateImage( // If the image is local, we can just read it directly, otherwise we need to download it if (isLocalImage) { + const outDir = isServerLikeOutput(config) + ? config.build.server + : getOutDirWithinCwd(config.outDir); + imageData = await fs.promises.readFile( new URL( - '.' + prependForwardSlash(join(config.build.assets, basename(originalImagePath))), + prependForwardSlash(join(outDir.pathname + config.build.assets, basename(originalImagePath))), serverRoot ) ); From 046505b6ec14194cea31dc2894b62807521e8be8 Mon Sep 17 00:00:00 2001 From: Michaili K Date: Tue, 26 Sep 2023 15:11:11 +0200 Subject: [PATCH 2/5] Add missing import --- packages/astro/src/assets/build/generate.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/astro/src/assets/build/generate.ts b/packages/astro/src/assets/build/generate.ts index 7b7fb3e742b9..70b48d98e283 100644 --- a/packages/astro/src/assets/build/generate.ts +++ b/packages/astro/src/assets/build/generate.ts @@ -7,6 +7,7 @@ import { getConfiguredImageService, isESMImportedImage } from '../internal.js'; import type { LocalImageService } from '../services/service.js'; import type { ImageMetadata, ImageTransform } from '../types.js'; import { loadRemoteImage, type RemoteCacheEntry } from './remote.js'; +import { getOutDirWithinCwd } from "#astro/core/build/common"; interface GenerationDataUncached { cached: false; @@ -106,7 +107,7 @@ export async function generateImage( const outDir = isServerLikeOutput(config) ? config.build.server : getOutDirWithinCwd(config.outDir); - + imageData = await fs.promises.readFile( new URL( prependForwardSlash(join(outDir.pathname + config.build.assets, basename(originalImagePath))), From 193b301744685c9cfbd9ac1ee79df06d9a35d73b Mon Sep 17 00:00:00 2001 From: Michaili K Date: Tue, 26 Sep 2023 15:12:49 +0200 Subject: [PATCH 3/5] Add changeset --- .changeset/little-onions-relax.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/little-onions-relax.md diff --git a/.changeset/little-onions-relax.md b/.changeset/little-onions-relax.md new file mode 100644 index 000000000000..820b0a40ebd3 --- /dev/null +++ b/.changeset/little-onions-relax.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fix asset optimization failing when outDir is outside the project directory From 2d8d2e01de4b1bf857668127bccbe462e642cda2 Mon Sep 17 00:00:00 2001 From: Michaili K Date: Tue, 26 Sep 2023 15:17:04 +0200 Subject: [PATCH 4/5] Fix import, again. --- packages/astro/src/assets/build/generate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/assets/build/generate.ts b/packages/astro/src/assets/build/generate.ts index 70b48d98e283..6bf6ee0aa560 100644 --- a/packages/astro/src/assets/build/generate.ts +++ b/packages/astro/src/assets/build/generate.ts @@ -7,7 +7,7 @@ import { getConfiguredImageService, isESMImportedImage } from '../internal.js'; import type { LocalImageService } from '../services/service.js'; import type { ImageMetadata, ImageTransform } from '../types.js'; import { loadRemoteImage, type RemoteCacheEntry } from './remote.js'; -import { getOutDirWithinCwd } from "#astro/core/build/common"; +import { getOutDirWithinCwd } from "../../core/build/common.js"; interface GenerationDataUncached { cached: false; From c4b5e712e07026c50b426df3b322159d89812986 Mon Sep 17 00:00:00 2001 From: Michaili K Date: Tue, 26 Sep 2023 16:03:50 +0200 Subject: [PATCH 5/5] Use getOutDirWithinCwd in the serverRoot declaration --- packages/astro/src/assets/build/generate.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/astro/src/assets/build/generate.ts b/packages/astro/src/assets/build/generate.ts index 6bf6ee0aa560..613b80ee04fb 100644 --- a/packages/astro/src/assets/build/generate.ts +++ b/packages/astro/src/assets/build/generate.ts @@ -49,7 +49,7 @@ export async function generateImage( serverRoot = config.build.server; clientRoot = config.build.client; } else { - serverRoot = config.outDir; + serverRoot = getOutDirWithinCwd(config.outDir); clientRoot = config.outDir; } @@ -104,13 +104,9 @@ export async function generateImage( // If the image is local, we can just read it directly, otherwise we need to download it if (isLocalImage) { - const outDir = isServerLikeOutput(config) - ? config.build.server - : getOutDirWithinCwd(config.outDir); - imageData = await fs.promises.readFile( new URL( - prependForwardSlash(join(outDir.pathname + config.build.assets, basename(originalImagePath))), + '.' + prependForwardSlash(join(config.build.assets, basename(originalImagePath))), serverRoot ) );