Move the new plugin over
This commit is contained in:
parent
4194e8b8f8
commit
aed07432a2
3 changed files with 67 additions and 24 deletions
|
@ -5,6 +5,7 @@ import type { RenderedChunk } from 'rollup';
|
||||||
|
|
||||||
import { rollupPluginAstroBuildHTML } from '../../vite-plugin-build-html/index.js';
|
import { rollupPluginAstroBuildHTML } from '../../vite-plugin-build-html/index.js';
|
||||||
import { rollupPluginAstroBuildCSS } from '../../vite-plugin-build-css/index.js';
|
import { rollupPluginAstroBuildCSS } from '../../vite-plugin-build-css/index.js';
|
||||||
|
import { rollupPluginAstroBuildLoadFallback } from '../../vite-plugin-build-load-fallback/index.js';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as colors from 'kleur/colors';
|
import * as colors from 'kleur/colors';
|
||||||
import { performance } from 'perf_hooks';
|
import { performance } from 'perf_hooks';
|
||||||
|
@ -200,6 +201,10 @@ class AstroBuilder {
|
||||||
pureCSSChunks,
|
pureCSSChunks,
|
||||||
}),
|
}),
|
||||||
...(viteConfig.plugins || []),
|
...(viteConfig.plugins || []),
|
||||||
|
rollupPluginAstroBuildLoadFallback({
|
||||||
|
astroConfig: this.config,
|
||||||
|
viteServer
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
publicDir: viteConfig.publicDir,
|
publicDir: viteConfig.publicDir,
|
||||||
root: viteConfig.root,
|
root: viteConfig.root,
|
||||||
|
|
|
@ -38,7 +38,7 @@ interface PluginOptions {
|
||||||
viteServer: ViteDevServer;
|
viteServer: ViteDevServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollupPluginAstroBuildHTML(options: PluginOptions): VitePlugin[] {
|
export function rollupPluginAstroBuildHTML(options: PluginOptions): VitePlugin {
|
||||||
const { astroConfig, astroStyleMap, astroPageStyleMap, chunkToReferenceIdMap, pureCSSChunks, logging, origin, allPages, routeCache, viteServer, pageNames } = options;
|
const { astroConfig, astroStyleMap, astroPageStyleMap, chunkToReferenceIdMap, pureCSSChunks, logging, origin, allPages, routeCache, viteServer, pageNames } = options;
|
||||||
|
|
||||||
// The filepath root of the src folder
|
// The filepath root of the src folder
|
||||||
|
@ -56,7 +56,7 @@ export function rollupPluginAstroBuildHTML(options: PluginOptions): VitePlugin[]
|
||||||
|
|
||||||
const cssChunkMap = new Map<string, string[]>();
|
const cssChunkMap = new Map<string, string[]>();
|
||||||
|
|
||||||
return [{
|
return {
|
||||||
name: PLUGIN_NAME,
|
name: PLUGIN_NAME,
|
||||||
|
|
||||||
enforce: 'pre',
|
enforce: 'pre',
|
||||||
|
@ -452,26 +452,5 @@ export function rollupPluginAstroBuildHTML(options: PluginOptions): VitePlugin[]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}, {
|
};
|
||||||
name: '@astro/rollup-plugin-build-load-fallback',
|
|
||||||
enforce: 'post',
|
|
||||||
resolveId(id) {
|
|
||||||
// If we got here, nothing picked up this module, so let's try
|
|
||||||
// and grab it from the viteServer used for SSR loading.
|
|
||||||
if(id[0] === '/') {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
async load(id) {
|
|
||||||
try {
|
|
||||||
// This uses ssrLoadModule and not transformResult because
|
|
||||||
// transformResult is always giving JavaScript.
|
|
||||||
const mod = await viteServer.ssrLoadModule(id);
|
|
||||||
return mod.default;
|
|
||||||
} catch {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
|
|
59
packages/astro/src/vite-plugin-build-load-fallback/index.ts
Normal file
59
packages/astro/src/vite-plugin-build-load-fallback/index.ts
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import type { Plugin as VitePlugin, ViteDevServer } from 'vite';
|
||||||
|
import type { AstroConfig } from '../@types/astro';
|
||||||
|
|
||||||
|
export interface PluginOptions {
|
||||||
|
astroConfig: AstroConfig;
|
||||||
|
viteServer: ViteDevServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function rollupPluginAstroBuildLoadFallback({ astroConfig, viteServer }: PluginOptions): VitePlugin {
|
||||||
|
let viteFallback: VitePlugin | undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: '@astro/rollup-plugin-build-load-fallback',
|
||||||
|
enforce: 'post',
|
||||||
|
configResolved(resolvedConfig) {
|
||||||
|
resolvedConfig.plugins?.findIndex(p => p.name === '');
|
||||||
|
|
||||||
|
// Move this plugin right before the end. vite:load-fallback throws if nothing
|
||||||
|
// is found. But we want to try it and if it fails, try to get from SSR.
|
||||||
|
const plugins = resolvedConfig.plugins as VitePlugin[];
|
||||||
|
const ourIndex = plugins.findIndex((p) => p.name === '@astro/rollup-plugin-build-load-fallback');
|
||||||
|
if (ourIndex !== -1) {
|
||||||
|
const ourPlugin = plugins[ourIndex];
|
||||||
|
plugins.splice(ourIndex, 1);
|
||||||
|
plugins.splice(plugins.length - 1, 0, ourPlugin);
|
||||||
|
viteFallback = plugins.find(p => p.name === 'vite:load-fallback');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolveId(id) {
|
||||||
|
// If we got here, nothing picked up this module, so let's try
|
||||||
|
// and grab it from the viteServer used for SSR loading.
|
||||||
|
if(id[0] === '/' && !id.startsWith(astroConfig.projectRoot.pathname)) {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
async load(id) {
|
||||||
|
if(id[0] === '/' && !id.startsWith(astroConfig.projectRoot.pathname)) {
|
||||||
|
try {
|
||||||
|
if(viteFallback) {
|
||||||
|
// First try viteFallback. Assuming this is a filepath, it will pick it up.
|
||||||
|
return await viteFallback.load?.call(this, id);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
try {
|
||||||
|
// This uses ssrLoadModule and not transformResult because
|
||||||
|
// transformResult is always giving JavaScript.
|
||||||
|
const mod = await viteServer.ssrLoadModule(id);
|
||||||
|
return mod.default;
|
||||||
|
} catch {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue