diff --git a/.changeset/strong-plants-tell.md b/.changeset/strong-plants-tell.md new file mode 100644 index 000000000..0fb705640 --- /dev/null +++ b/.changeset/strong-plants-tell.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fix client build sourcemap generation diff --git a/packages/astro/src/core/build/static-build.ts b/packages/astro/src/core/build/static-build.ts index 84574ace9..eb8f8fb5b 100644 --- a/packages/astro/src/core/build/static-build.ts +++ b/packages/astro/src/core/build/static-build.ts @@ -214,6 +214,7 @@ async function clientBuild( exclude: [...(viteConfig.optimizeDeps?.exclude ?? [])], }, build: { + ...viteConfig.build, emptyOutDir: false, minify: 'esbuild', outDir: fileURLToPath(out), diff --git a/packages/astro/src/vite-plugin-astro/index.ts b/packages/astro/src/vite-plugin-astro/index.ts index 63eae758e..8d59d6fa7 100644 --- a/packages/astro/src/vite-plugin-astro/index.ts +++ b/packages/astro/src/vite-plugin-astro/index.ts @@ -210,11 +210,11 @@ export default function astro({ config, logging }: AstroPluginOptions): vite.Plu const parsedId = parseAstroRequest(id); const query = parsedId.query; if (!id.endsWith('.astro') || query.astro) { - return source; + return; } // if we still get a relative path here, vite couldn't resolve the import if (isRelativePath(parsedId.filename)) { - return source; + return; } const filename = normalizeFilename(parsedId.filename); diff --git a/packages/astro/src/vite-plugin-env/index.ts b/packages/astro/src/vite-plugin-env/index.ts index af9d2d557..f513771db 100644 --- a/packages/astro/src/vite-plugin-env/index.ts +++ b/packages/astro/src/vite-plugin-env/index.ts @@ -67,11 +67,11 @@ export default function envVitePlugin({ const ssr = options?.ssr === true; if (!ssr) { - return source; + return; } if (!source.includes('import.meta') || !/\benv\b/.test(source)) { - return source; + return; } if (typeof privateEnv === 'undefined') { @@ -110,9 +110,9 @@ export default function envVitePlugin({ } } - if (!privateEnv || !pattern) return source; + if (!privateEnv || !pattern) return; const references = getReferencedPrivateKeys(source, privateEnv); - if (references.size === 0) return source; + if (references.size === 0) return; // Find matches for *private* env and do our own replacement. const s = new MagicString(source); @@ -133,7 +133,10 @@ export default function envVitePlugin({ s.overwrite(start, end, replacement); } - return s.toString(); + return { + code: s.toString(), + map: s.generateMap(), + }; }, }; } diff --git a/packages/astro/test/fixtures/sourcemap/astro.config.mjs b/packages/astro/test/fixtures/sourcemap/astro.config.mjs new file mode 100644 index 000000000..b9c082273 --- /dev/null +++ b/packages/astro/test/fixtures/sourcemap/astro.config.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from 'astro/config'; +import react from '@astrojs/react'; + +export default defineConfig({ + integrations: [react()], + vite: { + build: { + sourcemap: true, + } + } +}) diff --git a/packages/astro/test/fixtures/sourcemap/package.json b/packages/astro/test/fixtures/sourcemap/package.json new file mode 100644 index 000000000..34a6086ba --- /dev/null +++ b/packages/astro/test/fixtures/sourcemap/package.json @@ -0,0 +1,11 @@ +{ + "name": "@test/sourcemap", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/react": "workspace:*", + "astro": "workspace:*", + "react": "^18.1.0", + "react-dom": "^18.1.0" + } +} diff --git a/packages/astro/test/fixtures/sourcemap/src/components/Counter.jsx b/packages/astro/test/fixtures/sourcemap/src/components/Counter.jsx new file mode 100644 index 000000000..56c220522 --- /dev/null +++ b/packages/astro/test/fixtures/sourcemap/src/components/Counter.jsx @@ -0,0 +1,11 @@ +import React, { useState } from 'react'; + +export default function Counter() { + const [count, setCount] = useState(0); + return ( +