Allow users to pass config to Vite
This commit is contained in:
parent
8126686878
commit
91cb38f451
10 changed files with 20 additions and 15 deletions
5
.changeset/pink-trainers-learn.md
Normal file
5
.changeset/pink-trainers-learn.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'astro': minor
|
||||
---
|
||||
|
||||
Use new compiler, move Astro to Vite
|
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
|
@ -22,7 +22,8 @@ jobs:
|
|||
- os: windows-latest
|
||||
node_version: 14
|
||||
fail-fast: false
|
||||
|
||||
env:
|
||||
LANG: en-us
|
||||
name: 'Test: node-${{ matrix.node_version }}, ${{ matrix.os }}'
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
|
@ -22,7 +22,3 @@ export default /** @type {import('astro').AstroUserConfig} */ (
|
|||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Snowpack Config
|
||||
|
||||
Astro is powered internally by Snowpack. You can configure Snowpack directly by creating a `snowpack.config.mjs` file. See [snowpack.dev](https://www.snowpack.dev/reference/configuration) for full documentation on this file.
|
||||
|
|
|
@ -91,6 +91,8 @@ export interface AstroUserConfig {
|
|||
*/
|
||||
trailingSlash?: 'always' | 'never' | 'ignore';
|
||||
};
|
||||
/** Pass configuration options to Vite */
|
||||
vite?: vite.InlineConfig;
|
||||
}
|
||||
|
||||
// NOTE(fks): We choose to keep our hand-generated AstroUserConfig interface so that
|
||||
|
|
|
@ -62,6 +62,7 @@ class AstroBuilder {
|
|||
hmr: { overlay: false },
|
||||
middlewareMode: 'ssr',
|
||||
},
|
||||
...(this.config.vite || {}),
|
||||
},
|
||||
{ astroConfig: this.config, logging }
|
||||
);
|
||||
|
|
|
@ -66,6 +66,7 @@ export const AstroConfigSchema = z.object({
|
|||
})
|
||||
.optional()
|
||||
.default({}),
|
||||
vite: z.any().optional().default({}), // TODO: we don’t need validation, but can we get better type inference?
|
||||
});
|
||||
|
||||
/** Turn raw config values into normalized values */
|
||||
|
|
|
@ -174,6 +174,7 @@ export class AstroDevServer {
|
|||
middlewareMode: 'ssr',
|
||||
host: this.hostname,
|
||||
},
|
||||
...(this.config.vite || {}),
|
||||
},
|
||||
{ astroConfig: this.config, logging: this.logging, devServer: this }
|
||||
);
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import type { InlineConfig, Plugin } from 'vite';
|
||||
import type { AstroConfig } from '../../@types/astro';
|
||||
import type { LogOptions } from '../../logger';
|
||||
|
||||
import fs from 'fs';
|
||||
import slash from 'slash';
|
||||
import deepmerge from 'deepmerge';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { createRequire } from 'module';
|
||||
import vite from 'vite';
|
||||
import { getPackageJSON, parseNpmName } from '../util.js';
|
||||
import astro from './plugin-astro.js';
|
||||
import markdown from './plugin-markdown.js';
|
||||
|
@ -16,7 +15,7 @@ import { AstroDevServer } from '../../dev';
|
|||
const require = createRequire(import.meta.url);
|
||||
|
||||
// note: ssr is still an experimental API hence the type omission
|
||||
type ViteConfigWithSSR = InlineConfig & { ssr?: { external?: string[]; noExternal?: string[] } };
|
||||
type ViteConfigWithSSR = vite.InlineConfig & { ssr?: { external?: string[]; noExternal?: string[] } };
|
||||
|
||||
/** Return a common starting point for all Vite actions */
|
||||
export async function loadViteConfig(
|
||||
|
@ -70,7 +69,7 @@ export async function loadViteConfig(
|
|||
optimizedDeps.add(`astro/client/${hydrator}`); // always prepare these for client
|
||||
});
|
||||
|
||||
return deepmerge(
|
||||
return vite.mergeConfig(
|
||||
{
|
||||
cacheDir: fileURLToPath(new URL('./node_modules/.vite/', astroConfig.projectRoot)), // using local caches allows Astro to be used in monorepos, etc.
|
||||
clearScreen: false,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import type { TransformResult } from '@astrojs/compiler';
|
||||
import type { Plugin } from 'vite';
|
||||
import type { AstroConfig, Renderer } from '../../@types/astro.js';
|
||||
import type { TransformResult } from '@astrojs/compiler';
|
||||
|
||||
import esbuild from 'esbuild';
|
||||
import fs from 'fs';
|
||||
|
|
|
@ -87,10 +87,10 @@ describe('Astro basics', () => {
|
|||
const result = await fixture.fetch('/bad-url');
|
||||
expect(result.status).toBe(404);
|
||||
});
|
||||
|
||||
// important: close preview server (free up port and connection)
|
||||
afterAll(async () => {
|
||||
await previewServer.stop();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// important: close preview server (free up port and connection)
|
||||
afterAll(async () => {
|
||||
if (previewServer) await previewServer.stop();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue