Fix client build sourcemap generation (#4195)
This commit is contained in:
parent
6086562a93
commit
28ab273a3d
10 changed files with 100 additions and 7 deletions
5
.changeset/strong-plants-tell.md
Normal file
5
.changeset/strong-plants-tell.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'astro': patch
|
||||
---
|
||||
|
||||
Fix client build sourcemap generation
|
|
@ -214,6 +214,7 @@ async function clientBuild(
|
|||
exclude: [...(viteConfig.optimizeDeps?.exclude ?? [])],
|
||||
},
|
||||
build: {
|
||||
...viteConfig.build,
|
||||
emptyOutDir: false,
|
||||
minify: 'esbuild',
|
||||
outDir: fileURLToPath(out),
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(),
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
11
packages/astro/test/fixtures/sourcemap/astro.config.mjs
vendored
Normal file
11
packages/astro/test/fixtures/sourcemap/astro.config.mjs
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import react from '@astrojs/react';
|
||||
|
||||
export default defineConfig({
|
||||
integrations: [react()],
|
||||
vite: {
|
||||
build: {
|
||||
sourcemap: true,
|
||||
}
|
||||
}
|
||||
})
|
11
packages/astro/test/fixtures/sourcemap/package.json
vendored
Normal file
11
packages/astro/test/fixtures/sourcemap/package.json
vendored
Normal file
|
@ -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"
|
||||
}
|
||||
}
|
11
packages/astro/test/fixtures/sourcemap/src/components/Counter.jsx
vendored
Normal file
11
packages/astro/test/fixtures/sourcemap/src/components/Counter.jsx
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
export default function Counter() {
|
||||
const [count, setCount] = useState(0);
|
||||
return (
|
||||
<div>
|
||||
<div>Count: {count}</div>
|
||||
<button type="button" onClick={() => setCount(count+1)}>Increment</button>
|
||||
</div>
|
||||
);
|
||||
}
|
17
packages/astro/test/fixtures/sourcemap/src/pages/index.astro
vendored
Normal file
17
packages/astro/test/fixtures/sourcemap/src/pages/index.astro
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
---
|
||||
import Counter from '../components/Counter';
|
||||
---
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Testing</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Testing</h1>
|
||||
<Counter client:load />
|
||||
</body>
|
||||
|
||||
</html>
|
22
packages/astro/test/sourcemap.test.js
Normal file
22
packages/astro/test/sourcemap.test.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import { expect } from 'chai';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
describe('Sourcemap', async () => {
|
||||
let fixture;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture({ root: './fixtures/sourcemap/' });
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('Builds sourcemap', async () => {
|
||||
const dir = await fixture.readdir('.');
|
||||
const counterMap = dir.find((file) => file.match(/^Counter\.\w+\.js\.map$/));
|
||||
expect(counterMap).to.be.ok;
|
||||
});
|
||||
|
||||
it('Builds non-empty sourcemap', async () => {
|
||||
const map = await fixture.readFile('entry.mjs.map');
|
||||
expect(map).to.not.include('"sources":[]');
|
||||
});
|
||||
});
|
|
@ -1783,6 +1783,18 @@ importers:
|
|||
'@astrojs/solid-js': link:../../../../integrations/solid
|
||||
astro: link:../../..
|
||||
|
||||
packages/astro/test/fixtures/sourcemap:
|
||||
specifiers:
|
||||
'@astrojs/react': workspace:*
|
||||
astro: workspace:*
|
||||
react: ^18.1.0
|
||||
react-dom: ^18.1.0
|
||||
dependencies:
|
||||
'@astrojs/react': link:../../../../integrations/react
|
||||
astro: link:../../..
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
|
||||
packages/astro/test/fixtures/ssr-api-route:
|
||||
specifiers:
|
||||
astro: workspace:*
|
||||
|
|
Loading…
Reference in a new issue